diff --git a/FETCH_HEAD b/FETCH_HEAD
deleted file mode 100644
index e69de29bb..000000000
diff --git a/common/foundation_models/lasr_vlm/lasr_vlm/nodes/vlm_service.py b/common/foundation_models/lasr_vlm/lasr_vlm/nodes/vlm_service.py
index 9073875d6..bc345c226 100644
--- a/common/foundation_models/lasr_vlm/lasr_vlm/nodes/vlm_service.py
+++ b/common/foundation_models/lasr_vlm/lasr_vlm/nodes/vlm_service.py
@@ -30,7 +30,7 @@ def __init__(self):
self.describe_people_callback,
)
- model_config = ModelConfig(model_name="moondream")
+ model_config = ModelConfig(model_name="gemma3:4b")
self.vlm = VLMInference(model_config, new_model=False)
self.get_logger().info("VLM Describe People service started")
diff --git a/common/foundation_models/lasr_vlm/lasr_vlm/vlm_inference.py b/common/foundation_models/lasr_vlm/lasr_vlm/vlm_inference.py
index 9969b384c..b7d1771c7 100644
--- a/common/foundation_models/lasr_vlm/lasr_vlm/vlm_inference.py
+++ b/common/foundation_models/lasr_vlm/lasr_vlm/vlm_inference.py
@@ -137,23 +137,7 @@ def visually_describe_people(input_image, inference: VLMInference) -> dict[str,
"""
attributes = ["hair_color", "hair_length", "glasses", "hat", "shirt color"]
- user_query = (
- f"Visually describe the person in the image, using the following attributes:"
- )
- for attr in attributes:
- user_query += f"\n- {attr}"
- # user_query_example = (
- # "\n\n The structure of the response should be a comma separated list of attribute: value pairs. For example, "
- # "'hair_color: _, hair_length: _, glasses: _, hat: _, shirt color: _', where the _ is replaced with the model's answer for that attribute. "
- # "For true or false attributes, the value should be simply true or false. For example, 'glasses: true' if the model thinks the person is wearing glasses, and 'hat: false' if the model thinks the person is not wearing a hat."
- # )
- user_query_example = (
- "\n\n The structure of the response should be a comma separated list of attribute: value pairs. For example, "
- "'hair_color: _, hair_length: _, glasses: _, hat: _, shirt color: _', where the _ is replaced with the model's answer for that attribute. "
- "For glasses and hat, only answer true if they are clearly and visibly present in the image. "
- "If you are not sure, answer false. For example, 'glasses: false' means the person is definitely not wearing glasses."
- )
- user_query += user_query_example
+ user_query = build_prompt(attributes)
print("Running VLM inference query")
response = inference.query_vision(prompt=user_query, image_path=input_image)
@@ -162,6 +146,27 @@ def visually_describe_people(input_image, inference: VLMInference) -> dict[str,
return parse_vlm_response(response, attributes)
+def build_prompt(attributes):
+ template = ", ".join(f"{attr}: _" for attr in attributes)
+
+ boolean_attrs = {"glasses", "hat"} # extend as needed
+ has_boolean = any(a.lower() in boolean_attrs for a in attributes)
+
+ prompt = (
+ "Describe the person in the image using ONLY this exact format, "
+ "replacing each underscore with your answer. Do not add any other text.\n\n"
+ f"{template}\n"
+ )
+
+ if has_boolean:
+ prompt += (
+ "\nFor glasses and hat: answer true only if clearly visible, "
+ "otherwise answer false.\n"
+ )
+
+ return prompt
+
+
def parse_vlm_response(response: str, attributes: list[str]) -> dict[str, list]:
"""
Parse the VLM response string into a dictionary of attribute values.
@@ -211,18 +216,18 @@ def postprocess_value(value: str):
def test_vlm_vision_query():
- model_name = "moondream" # "gemma3:4b", "qwen2.5vl:3b", "llama3.2"
+ model_name = "gemma3:4b" # "gemma3:4b", "qwen2.5vl:3b", "llama3.2"
model_config = ModelConfig(model_name=model_name)
ensure_model(model_name)
inference = VLMInference(model_config, new_model=False)
- image_dir = f"{os.getcwd()}/test_images"
- image_path = f"{image_dir}/person1.jpg"
-
- response: dict[str, list] = visually_describe_people(
- input_image=image_path, inference=inference
- )
- print(f"Vision response: {response}")
+ image_dir = f"{os.getcwd()}/test_images/more"
+ for image_file in os.listdir(image_dir):
+ image_path = f"{image_dir}/{image_file}"
+ response: dict[str, list] = visually_describe_people(
+ input_image=image_path, inference=inference
+ )
+ print(f"Vision response for {image_file}: {response}")
if __name__ == "__main__":
diff --git a/common/foundation_models/lasr_vlm/setup.py b/common/foundation_models/lasr_vlm/setup.py
index bfc97c43b..87ccf4d38 100644
--- a/common/foundation_models/lasr_vlm/setup.py
+++ b/common/foundation_models/lasr_vlm/setup.py
@@ -23,6 +23,7 @@ def run(self):
setup(
name=package_name,
+ cmdclass={"install": InstallCommand},
version="0.0.0",
packages=find_packages(exclude=["test"]),
data_files=[
diff --git a/common/interfaces/robot_ui/CMakeLists.txt b/common/interfaces/robot_ui/CMakeLists.txt
new file mode 100644
index 000000000..ee4ccecf7
--- /dev/null
+++ b/common/interfaces/robot_ui/CMakeLists.txt
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.8)
+project(robot_ui)
+
+find_package(ament_cmake REQUIRED)
+find_package(rosidl_default_generators REQUIRED)
+
+rosidl_generate_interfaces(${PROJECT_NAME}
+ "msg/Order.msg"
+ "msg/Confirm.msg"
+)
+
+install(PROGRAMS
+ scripts/build
+ scripts/dev
+ scripts/start
+ DESTINATION lib/${PROJECT_NAME}
+)
+
+install(DIRECTORY robot-interface
+ DESTINATION share/${PROJECT_NAME}
+)
+
+install(DIRECTORY launch
+ DESTINATION share/${PROJECT_NAME}
+)
+
+ament_package()
diff --git a/common/interfaces/robot_ui/launch/robot_ui.launch.py b/common/interfaces/robot_ui/launch/robot_ui.launch.py
new file mode 100644
index 000000000..bc8ea1153
--- /dev/null
+++ b/common/interfaces/robot_ui/launch/robot_ui.launch.py
@@ -0,0 +1,65 @@
+import os
+from ament_index_python.packages import get_package_share_directory
+from launch import LaunchDescription
+from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction
+from launch.substitutions import LaunchConfiguration
+from launch_ros.actions import Node
+
+
+def generate_launch_description():
+ ros_ip_arg = DeclareLaunchArgument(
+ "ros_ip",
+ default_value="10.68.0.139",
+ description="IP address rosbridge will bind to (also passed to the Next.js UI as ROS_IP)",
+ )
+
+ port_arg = DeclareLaunchArgument(
+ "port",
+ default_value="9090",
+ description="Port for the rosbridge WebSocket server",
+ )
+
+ ros_ip = LaunchConfiguration("ros_ip")
+ port = LaunchConfiguration("port")
+
+ rosbridge = Node(
+ package="rosbridge_server",
+ executable="rosbridge_websocket",
+ name="rosbridge_websocket",
+ parameters=[
+ {
+ "port": port,
+ "address": ros_ip,
+ }
+ ],
+ )
+
+ ui_dir = os.path.join(
+ get_package_share_directory("robot_ui"),
+ "robot-interface",
+ )
+
+ next_server = TimerAction(
+ period=2.0,
+ actions=[
+ ExecuteProcess(
+ cmd=[
+ "bash",
+ "-c",
+ "npm install && chmod +x node_modules/.bin/next && node_modules/.bin/next build && node_modules/.bin/next start",
+ ],
+ cwd=ui_dir,
+ additional_env={"ROS_IP": ros_ip},
+ output="screen",
+ )
+ ],
+ )
+
+ return LaunchDescription(
+ [
+ ros_ip_arg,
+ port_arg,
+ rosbridge,
+ next_server,
+ ]
+ )
diff --git a/common/interfaces/robot_ui/msg/Confirm.msg b/common/interfaces/robot_ui/msg/Confirm.msg
new file mode 100644
index 000000000..5fa07eb37
--- /dev/null
+++ b/common/interfaces/robot_ui/msg/Confirm.msg
@@ -0,0 +1 @@
+bool value
diff --git a/common/interfaces/robot_ui/msg/Order.msg b/common/interfaces/robot_ui/msg/Order.msg
new file mode 100644
index 000000000..8f4d3fd27
--- /dev/null
+++ b/common/interfaces/robot_ui/msg/Order.msg
@@ -0,0 +1 @@
+string[] products
diff --git a/common/interfaces/robot_ui/package-lock.json b/common/interfaces/robot_ui/package-lock.json
new file mode 100644
index 000000000..7f2606e0d
--- /dev/null
+++ b/common/interfaces/robot_ui/package-lock.json
@@ -0,0 +1,6 @@
+{
+ "name": "robot_ui",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {}
+}
diff --git a/common/interfaces/robot_ui/package.xml b/common/interfaces/robot_ui/package.xml
new file mode 100644
index 000000000..176070dae
--- /dev/null
+++ b/common/interfaces/robot_ui/package.xml
@@ -0,0 +1,20 @@
+
+
+
+ robot_ui
+ 0.0.0
+ Provides a tablet user interface for ordering and confirming actions within the coffee shop task.
+ Jared Swift
+ MIT
+
+ ament_cmake
+ rosidl_default_generators
+
+ rosidl_default_runtime
+
+ rosidl_interface_packages
+
+
+ ament_cmake
+
+
diff --git a/common/interfaces/robot_ui/robot-interface/.eslintrc.json b/common/interfaces/robot_ui/robot-interface/.eslintrc.json
new file mode 100644
index 000000000..bffb357a7
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/common/interfaces/robot_ui/robot-interface/app/globals.css b/common/interfaces/robot_ui/robot-interface/app/globals.css
new file mode 100644
index 000000000..b5c61c956
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/app/globals.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/common/interfaces/robot_ui/robot-interface/app/layout.tsx b/common/interfaces/robot_ui/robot-interface/app/layout.tsx
new file mode 100644
index 000000000..28be5c139
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/app/layout.tsx
@@ -0,0 +1,22 @@
+import "./globals.css";
+import type { Metadata } from "next";
+import { Inter } from "next/font/google";
+
+const inter = Inter({ subsets: ["latin"] });
+
+export const metadata: Metadata = {
+ title: "TIAGo",
+ description: "this is the description of the page",
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
{children}
+
+ );
+}
diff --git a/common/interfaces/robot_ui/robot-interface/app/page.tsx b/common/interfaces/robot_ui/robot-interface/app/page.tsx
new file mode 100644
index 000000000..a81ef44dd
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/app/page.tsx
@@ -0,0 +1,16 @@
+import dynamic from "next/dynamic";
+
+const App = dynamic(() => import("@/components/App"), {
+ ssr: false,
+ loading: () => Loading...
,
+});
+
+export default function Home() {
+ console.info("Advertising", process.env.ROS_IP, "to clients.");
+
+ return (
+
+
+
+ );
+}
diff --git a/common/interfaces/robot_ui/robot-interface/components/App.tsx b/common/interfaces/robot_ui/robot-interface/components/App.tsx
new file mode 100644
index 000000000..274e15037
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/components/App.tsx
@@ -0,0 +1,121 @@
+"use client";
+
+import { useEffect, useRef, useState } from "react";
+import { Message, Ros, Topic } from "roslib";
+
+import { CreateOrder } from "./screens/CreateOrder";
+import { Done } from "./screens/Done";
+import { Ready } from "./screens/Ready";
+import { YesNo } from "./screens/YesNo";
+
+type Screen = "home" | "order" | "done" | "ready" | "yes_no" | "debug";
+type ProductTopic = { products: string[] };
+type ConfirmTopic = { value: boolean };
+
+export default function App({ rosIp }: { rosIp: string }) {
+ const [ros, setROS] = useState();
+ const [screen, setScreen] = useState("home");
+
+ const doneTopicRef = useRef();
+ const readyTopicRef = useRef();
+ const orderTopicRef = useRef>();
+ const confirmTopicRef = useRef>();
+
+ useEffect(() => {
+ const ros = new Ros({
+ url: rosIp ? `ws://${rosIp}:9090` : "ws://127.0.0.1:9090",
+ });
+
+ ros.on("connection", () => {
+ setROS(ros);
+
+ const screenTopic = new Topic<{ data: Screen }>({
+ ros,
+ name: "/tablet/screen",
+ messageType: "std_msgs/msg/String",
+ });
+ screenTopic.subscribe((message) => setScreen(message.data));
+
+ doneTopicRef.current = new Topic({
+ ros,
+ name: "/tablet/done",
+ messageType: "std_msgs/msg/Empty",
+ });
+ doneTopicRef.current.advertise();
+
+ readyTopicRef.current = new Topic({
+ ros,
+ name: "/tablet/ready",
+ messageType: "std_msgs/msg/Empty",
+ });
+ readyTopicRef.current.advertise();
+
+ orderTopicRef.current = new Topic({
+ ros,
+ name: "/tablet/order",
+ messageType: "robot_ui/msg/Order",
+ });
+ orderTopicRef.current.advertise();
+
+ confirmTopicRef.current = new Topic({
+ ros,
+ name: "/tablet/confirm",
+ messageType: "robot_ui/msg/Confirm",
+ });
+ confirmTopicRef.current.advertise();
+ });
+ }, []);
+
+ if (screen === "order") {
+ return (
+ {
+ orderTopicRef.current!.publish(new Message({ products }) as ProductTopic);
+ setScreen("home");
+ }}
+ />
+ );
+ } else if (screen === "done") {
+ return (
+ {
+ doneTopicRef.current!.publish(new Message({}));
+ setScreen("home");
+ }}
+ />
+ );
+ } else if (screen === "ready") {
+ return (
+ {
+ readyTopicRef.current!.publish(new Message({}));
+ setScreen("home");
+ }}
+ />
+ );
+ } else if (screen === "yes_no") {
+ return (
+ {
+ confirmTopicRef.current!.publish(new Message({ value: true }) as ConfirmTopic);
+ setScreen("home");
+ }}
+ no={() => {
+ confirmTopicRef.current!.publish(new Message({ value: false }) as ConfirmTopic);
+ setScreen("home");
+ }}
+ />
+ );
+ } else if (screen === "debug") {
+ return <>{ros ? "Connected to ROS =)" : "Connecting to ROS..."}>;
+ } else {
+ return ros ? (
+
+ ) : (
+ Connecting...
+ );
+ }
+}
diff --git a/common/interfaces/robot_ui/robot-interface/components/screens/CreateOrder.tsx b/common/interfaces/robot_ui/robot-interface/components/screens/CreateOrder.tsx
new file mode 100644
index 000000000..9ae6306f7
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/components/screens/CreateOrder.tsx
@@ -0,0 +1,261 @@
+"use client";
+
+import { useState } from "react";
+
+type State = "edit" | "confirm";
+type Category = "drinks" | "fruits" | "snacks" | "food";
+
+interface Item {
+ id: string;
+ name: string;
+ category: Category;
+ image: string;
+}
+
+const CATEGORY_EMOJI: Record = {
+ drinks: "🥤",
+ fruits: "🍎",
+ snacks: "🍿",
+ food: "🥫",
+};
+
+const RAW = "https://raw.githubusercontent.com/RoboCupAtHome/Incheon2026/main/objects/known_objects";
+
+const ITEMS: Item[] = [
+ // Drinks (.jpg, folder drinks!drink)
+ { id: "juice_pack", name: "Juice Pack", category: "drinks", image: `${RAW}/drinks!drink/juice_pack.jpg` },
+ { id: "cola", name: "Cola", category: "drinks", image: `${RAW}/drinks!drink/cola.jpg` },
+ { id: "milk", name: "Milk", category: "drinks", image: `${RAW}/drinks!drink/milk.jpg` },
+ { id: "orange_juice", name: "Orange Juice", category: "drinks", image: `${RAW}/drinks!drink/orange_juice.jpg` },
+ { id: "tropical_juice", name: "Tropical Juice", category: "drinks", image: `${RAW}/drinks!drink/tropical_juice.jpg` },
+ { id: "red_wine", name: "Red Wine", category: "drinks", image: `${RAW}/drinks!drink/red_wine.jpg` },
+ { id: "iced_tea", name: "Iced Tea", category: "drinks", image: `${RAW}/drinks!drink/iced_tea.jpg` },
+ // Fruits (.png, folder fruits!fruit)
+ { id: "orange", name: "Orange", category: "fruits", image: `${RAW}/fruits!fruit/orange.png` },
+ { id: "pear", name: "Pear", category: "fruits", image: `${RAW}/fruits!fruit/pear.png` },
+ { id: "peach", name: "Peach", category: "fruits", image: `${RAW}/fruits!fruit/peach.png` },
+ { id: "strawberry", name: "Strawberry", category: "fruits", image: `${RAW}/fruits!fruit/strawberry.png` },
+ { id: "apple", name: "Apple", category: "fruits", image: `${RAW}/fruits!fruit/apple.png` },
+ { id: "lemon", name: "Lemon", category: "fruits", image: `${RAW}/fruits!fruit/lemon.png` },
+ { id: "banana", name: "Banana", category: "fruits", image: `${RAW}/fruits!fruit/banana.png` },
+ { id: "plum", name: "Plum", category: "fruits", image: `${RAW}/fruits!fruit/plum.png` },
+ // Snacks (mixed formats, folder snacks!snack)
+ { id: "cornflakes", name: "Cornflakes", category: "snacks", image: `${RAW}/snacks!snack/cornflakes.jpg` },
+ { id: "pringles", name: "Pringles", category: "snacks", image: `${RAW}/snacks!snack/pringles.png` },
+ { id: "cheezit", name: "Cheez-It", category: "snacks", image: `${RAW}/snacks!snack/cheezit.png` },
+ // Food (.png, folder food)
+ { id: "chocolate_jello", name: "Chocolate Jello", category: "food", image: `${RAW}/food/chocolate_jello.png` },
+ { id: "coffee_grounds", name: "Coffee Grounds", category: "food", image: `${RAW}/food/coffee_grounds.png` },
+ { id: "mustard", name: "Mustard", category: "food", image: `${RAW}/food/mustard.png` },
+ { id: "tomato_soup", name: "Tomato Soup", category: "food", image: `${RAW}/food/tomato_soup.png` },
+ { id: "tuna", name: "Tuna", category: "food", image: `${RAW}/food/tuna.png` },
+ { id: "strawberry_jello", name: "Strawberry Jello", category: "food", image: `${RAW}/food/strawberry_jello.png` },
+ { id: "spam", name: "Spam", category: "food", image: `${RAW}/food/spam.png` },
+ { id: "sugar", name: "Sugar", category: "food", image: `${RAW}/food/sugar.png` },
+];
+
+const CATEGORIES: Category[] = ["drinks", "fruits", "snacks", "food"];
+
+// Expand quantity map to a flat array of ids (e.g. {cola: 2} → ["cola", "cola"])
+function expandOrder(qty: Record): string[] {
+ return Object.entries(qty).flatMap(([id, n]) => Array(n).fill(id));
+}
+
+export function CreateOrder({ finish }: { finish: (order: string[]) => void }) {
+ const [state, setState] = useState("edit");
+ const [qty, setQty] = useState>({});
+
+ const totalItems = Object.values(qty).reduce((a, b) => a + b, 0);
+
+ return (
+
+ {state === "edit" ? (
+ setState("confirm")}
+ />
+ ) : (
+ finish(expandOrder(qty))}
+ cancel={() => setState("edit")}
+ />
+ )}
+
+ );
+}
+
+function EditMode({
+ qty,
+ setQty,
+ totalItems,
+ confirm,
+}: {
+ qty: Record;
+ setQty: React.Dispatch>>;
+ totalItems: number;
+ confirm: () => void;
+}) {
+ const [activeCategory, setActiveCategory] = useState("all");
+
+ const visible = activeCategory === "all" ? ITEMS : ITEMS.filter((i) => i.category === activeCategory);
+
+ const inc = (id: string) => setQty((prev) => ({ ...prev, [id]: (prev[id] ?? 0) + 1 }));
+ const dec = (id: string) =>
+ setQty((prev) => {
+ const next = { ...prev };
+ if ((next[id] ?? 0) <= 1) delete next[id];
+ else next[id]--;
+ return next;
+ });
+
+ return (
+ <>
+ {/* Category tabs */}
+
+ {(["all", ...CATEGORIES] as const).map((cat) => (
+
+ ))}
+
+
+ {/* Item grid */}
+
+ {visible.map((item) => {
+ const count = qty[item.id] ?? 0;
+ return (
+
0 ? "border-white" : "border-transparent")
+ }
+ >
+ {/* Image */}
+
+ {/* eslint-disable-next-line @next/next/no-img-element */}
+

+ {count > 0 && (
+
+ {count}
+
+ )}
+
+ {/* Name */}
+
+ {item.name}
+
+ {/* +/- controls */}
+
+
+
+
+
+ );
+ })}
+
+
+ {/* Bottom bar */}
+
+
+
+ {totalItems === 0
+ ? "No items selected"
+ : Object.entries(qty)
+ .filter(([, n]) => n > 0)
+ .map(([id, n]) => `${n}× ${ITEMS.find((i) => i.id === id)!.name}`)
+ .join(", ")}
+
+
+
+
+
+ >
+ );
+}
+
+function ConfirmMode({
+ qty,
+ finish,
+ cancel,
+}: {
+ qty: Record;
+ finish: () => void;
+ cancel: () => void;
+}) {
+ const orderedItems = Object.entries(qty)
+ .filter(([, n]) => n > 0)
+ .map(([id, n]) => ({ item: ITEMS.find((i) => i.id === id)!, n }));
+
+ return (
+
+
Confirm Order
+
+ {orderedItems.map(({ item, n }) => (
+
+ {/* eslint-disable-next-line @next/next/no-img-element */}
+

+
+ {item.name}
+ {item.category}
+
+
{n}×
+
+ ))}
+
+
+
+
+
+
+ );
+}
diff --git a/common/interfaces/robot_ui/robot-interface/components/screens/Done.tsx b/common/interfaces/robot_ui/robot-interface/components/screens/Done.tsx
new file mode 100644
index 000000000..a8fb867ef
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/components/screens/Done.tsx
@@ -0,0 +1,14 @@
+"use client";
+
+export function Done({ done }: { done: () => void }) {
+ return (
+
+ );
+}
diff --git a/common/interfaces/robot_ui/robot-interface/components/screens/Ready.tsx b/common/interfaces/robot_ui/robot-interface/components/screens/Ready.tsx
new file mode 100644
index 000000000..bd2ea6c72
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/components/screens/Ready.tsx
@@ -0,0 +1,14 @@
+"use client";
+
+export function Ready({ ready }: { ready: () => void }) {
+ return (
+
+
+ Click here to start
+
+
+ );
+}
diff --git a/common/interfaces/robot_ui/robot-interface/components/screens/YesNo.tsx b/common/interfaces/robot_ui/robot-interface/components/screens/YesNo.tsx
new file mode 100644
index 000000000..a72f05d50
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/components/screens/YesNo.tsx
@@ -0,0 +1,20 @@
+"use client";
+
+export function YesNo({ yes, no }: { yes: () => void; no: () => void }) {
+ return (
+
+ );
+}
diff --git a/common/interfaces/robot_ui/robot-interface/next.config.js b/common/interfaces/robot_ui/robot-interface/next.config.js
new file mode 100644
index 000000000..8c0d306ad
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/next.config.js
@@ -0,0 +1,12 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ webpack: (config) => {
+ config.externals.push({
+ "utf-8-validate": "commonjs utf-8-validate",
+ "bufferutil": "commonjs bufferutil",
+ });
+ return config;
+ },
+};
+
+module.exports = nextConfig;
diff --git a/common/interfaces/robot_ui/robot-interface/package-lock.json b/common/interfaces/robot_ui/robot-interface/package-lock.json
new file mode 100644
index 000000000..e35a89faa
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/package-lock.json
@@ -0,0 +1,5798 @@
+{
+ "name": "robot-interface",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "robot-interface",
+ "version": "0.1.0",
+ "dependencies": {
+ "@fortawesome/fontawesome-svg-core": "^6.4.2",
+ "@fortawesome/free-solid-svg-icons": "^6.4.2",
+ "@fortawesome/react-fontawesome": "^0.2.0",
+ "@types/node": "20.6.0",
+ "@types/react": "18.2.21",
+ "@types/react-dom": "18.2.7",
+ "@types/roslib": "^1.3.1",
+ "autoprefixer": "10.4.15",
+ "eslint": "8.49.0",
+ "eslint-config-next": "13.4.19",
+ "next": "13.4.19",
+ "postcss": "8.4.29",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "roslib": "^1.3.0",
+ "tailwindcss": "3.3.3",
+ "typescript": "5.2.2"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
+ "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.1",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz",
+ "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-common-types": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz",
+ "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-svg-core": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz",
+ "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==",
+ "license": "MIT",
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.7.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-solid-svg-icons": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.2.tgz",
+ "integrity": "sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==",
+ "license": "(CC-BY-4.0 AND MIT)",
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.7.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/react-fontawesome": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.6.tgz",
+ "integrity": "sha512-mtBFIi1UsYQo7rYonYFkjgYKGoL8T+fEH6NGUpvuqtY3ytMsAoDaPo5rk25KuMtKDipY4bGYM/CkmCHA1N3FUg==",
+ "deprecated": "v0.2.x is no longer supported. Unless you are still using FontAwesome 5, please update to v3.1.1 or greater.",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "@fortawesome/fontawesome-svg-core": "~1 || ~6 || ~7",
+ "react": "^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
+ "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1",
+ "@emnapi/runtime": "^1.7.1"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz",
+ "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==",
+ "license": "MIT"
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz",
+ "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "glob": "7.1.7"
+ }
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz",
+ "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz",
+ "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz",
+ "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz",
+ "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz",
+ "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz",
+ "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz",
+ "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-ia32-msvc": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz",
+ "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz",
+ "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nolyfill/is-core-module": {
+ "version": "1.0.39",
+ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
+ "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.4.0"
+ }
+ },
+ "node_modules/@rtsao/scc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+ "license": "MIT"
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.16.1.tgz",
+ "integrity": "sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==",
+ "license": "MIT"
+ },
+ "node_modules/@socket.io/component-emitter": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+ "license": "MIT"
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz",
+ "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/cors": {
+ "version": "2.8.19",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
+ "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.6.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz",
+ "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.15",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "18.2.21",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz",
+ "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz",
+ "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/roslib": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/roslib/-/roslib-1.3.5.tgz",
+ "integrity": "sha512-rye0xL6oZQFUaC79PXpM6zhYflpHuMTiEdEYkra5psBbTQ+m049UKMXzBFci8UgptULG+CB86wJBjD9q3WB5rw==",
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter2": "^6.4.0"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.26.0.tgz",
+ "integrity": "sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
+ "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
+ "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
+ "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+ "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz",
+ "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
+ "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "6.21.0",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz",
+ "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-android-arm64": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz",
+ "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz",
+ "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-x64": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz",
+ "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz",
+ "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz",
+ "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz",
+ "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz",
+ "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz",
+ "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-loong64-gnu": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz",
+ "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-loong64-musl": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz",
+ "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz",
+ "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz",
+ "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz",
+ "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz",
+ "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz",
+ "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz",
+ "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-openharmony-arm64": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz",
+ "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz",
+ "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "1.10.0",
+ "@emnapi/runtime": "1.10.0",
+ "@napi-rs/wasm-runtime": "^1.1.4"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz",
+ "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz",
+ "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz",
+ "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@xmldom/xmldom": {
+ "version": "0.8.13",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz",
+ "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
+ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "is-array-buffer": "^3.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
+ "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.24.0",
+ "es-object-atoms": "^1.1.1",
+ "get-intrinsic": "^1.3.0",
+ "is-string": "^1.1.1",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+ "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "es-shim-unscopables": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+ "license": "MIT"
+ },
+ "node_modules/async-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.15",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz",
+ "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.21.10",
+ "caniuse-lite": "^1.0.30001520",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz",
+ "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==",
+ "license": "MPL-2.0",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "license": "MIT",
+ "engines": {
+ "node": "^4.5.0 || >= 5.9"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.40",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz",
+ "integrity": "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==",
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz",
+ "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz",
+ "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.10.38",
+ "caniuse-lite": "^1.0.30001799",
+ "electron-to-chromium": "^1.5.376",
+ "node-releases": "^2.0.48",
+ "update-browserslist-db": "^1.2.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
+ "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "get-intrinsic": "^1.3.0",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001799",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz",
+ "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/cbor-js": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/cbor-js/-/cbor-js-0.1.0.tgz",
+ "integrity": "sha512-7sQ/TvDZPl7csT1Sif9G0+MA0I0JOVah8+wWlJVQdVEgIbCzlN/ab3x+uvMNsc34TUvO6osQTAmB2ls80JX6tw==",
+ "license": "MIT"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+ "license": "MIT"
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "license": "MIT"
+ },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cors": {
+ "version": "2.8.6",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
+ "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "license": "MIT"
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/inspect-js"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "license": "MIT"
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "license": "MIT"
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.381",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.381.tgz",
+ "integrity": "sha512-n9Wa6yB+vDsGuA8AKbl/0z7HbvWqt5jxIdvr1IUicd0ryPrk7/xzwqLv8D9AbbvZ6avVNtXYLTfmgFHkwkyelg==",
+ "license": "ISC"
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "license": "MIT"
+ },
+ "node_modules/engine.io": {
+ "version": "6.6.9",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.9.tgz",
+ "integrity": "sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
+ "@types/ws": "^8.5.12",
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.7.2",
+ "cors": "~2.8.5",
+ "debug": "~4.4.1",
+ "engine.io-parser": "~5.2.1",
+ "ws": "~8.21.0"
+ },
+ "engines": {
+ "node": ">=10.2.0"
+ }
+ },
+ "node_modules/engine.io-parser": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+ "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.24.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz",
+ "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==",
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.2.1",
+ "is-set": "^2.0.3",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.1",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.4",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.4",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "stop-iteration-iterator": "^1.1.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.19"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-abstract-get": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz",
+ "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.2",
+ "is-callable": "^1.2.7",
+ "object-inspect": "^1.13.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.3.tgz",
+ "integrity": "sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.9",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.24.2",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.1.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.3.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "iterator.prototype": "^1.1.5",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz",
+ "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-abstract-get": "^1.0.0",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.1.0",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz",
+ "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.2",
+ "@eslint/js": "8.49.0",
+ "@humanwhocodes/config-array": "^0.11.11",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz",
+ "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==",
+ "license": "MIT",
+ "dependencies": {
+ "@next/eslint-plugin-next": "13.4.19",
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.31.7",
+ "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
+ "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
+ "license": "ISC",
+ "dependencies": {
+ "@nolyfill/is-core-module": "1.0.39",
+ "debug": "^4.4.0",
+ "get-tsconfig": "^4.10.0",
+ "is-bun-module": "^2.0.0",
+ "stable-hash": "^0.0.5",
+ "tinyglobby": "^0.2.13",
+ "unrs-resolver": "^1.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-import-resolver-typescript"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.10",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz",
+ "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.16.1",
+ "resolve": "^2.0.0-next.6"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.13.0.tgz",
+ "integrity": "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.32.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
+ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.9",
+ "array.prototype.findlastindex": "^1.2.6",
+ "array.prototype.flat": "^1.3.3",
+ "array.prototype.flatmap": "^1.3.3",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.1",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.16.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.1",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.9",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
+ "license": "MIT",
+ "dependencies": {
+ "aria-query": "^5.3.2",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.10.0",
+ "axobject-query": "^4.1.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
+ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.3",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.2.1",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.9",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.1",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.12",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.0.0-canary-7118f5dd7-20230705",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz",
+ "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter2": {
+ "version": "6.4.9",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz",
+ "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
+ "license": "ISC"
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz",
+ "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.9",
+ "call-bound": "^1.0.4",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2",
+ "hasown": "^2.0.4",
+ "is-callable": "^1.2.7",
+ "is-document.all": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/generator-function": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
+ "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz",
+ "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==",
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "license": "MIT",
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "license": "MIT"
+ },
+ "node_modules/has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/internal-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-async-function": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "async-function": "^1.0.0",
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bun-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
+ "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.7.1"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.2",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
+ "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-document.all": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz",
+ "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
+ "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.4",
+ "generator-function": "^2.0.0",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/iterator.prototype": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "get-proto": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
+ "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "license": "MIT",
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.15",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
+ "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/napi-postinstall": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
+ "license": "MIT",
+ "bin": {
+ "napi-postinstall": "lib/cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/napi-postinstall"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "license": "MIT"
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/next": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz",
+ "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==",
+ "deprecated": "This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details.",
+ "license": "MIT",
+ "dependencies": {
+ "@next/env": "13.4.19",
+ "@swc/helpers": "0.5.1",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001406",
+ "postcss": "8.4.14",
+ "styled-jsx": "5.1.1",
+ "watchpack": "2.4.0",
+ "zod": "3.21.4"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": ">=16.8.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "13.4.19",
+ "@next/swc-darwin-x64": "13.4.19",
+ "@next/swc-linux-arm64-gnu": "13.4.19",
+ "@next/swc-linux-arm64-musl": "13.4.19",
+ "@next/swc-linux-x64-gnu": "13.4.19",
+ "@next/swc-linux-x64-musl": "13.4.19",
+ "@next/swc-win32-arm64-msvc": "13.4.19",
+ "@next/swc-win32-ia32-msvc": "13.4.19",
+ "@next/swc-win32-x64-msvc": "13.4.19"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/node-exports-info": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz",
+ "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==",
+ "license": "MIT",
+ "dependencies": {
+ "array.prototype.flatmap": "^1.3.3",
+ "es-errors": "^1.3.0",
+ "object.entries": "^1.1.9",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/node-exports-info/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.50",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.50.tgz",
+ "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
+ "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/own-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pngparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pngparse/-/pngparse-2.0.1.tgz",
+ "integrity": "sha512-RyB1P0BBwt3CNIZ5wT53lR1dT3CUtopnMOuP8xZdHjPhI/uXNNRnkx1yQb/3MMMyyMeo6p19fiIRHcLopWIkxA=="
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.29",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz",
+ "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-import/node_modules/resolve": {
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
+ "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz",
+ "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "license": "MIT"
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "2.0.0-next.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz",
+ "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.2",
+ "node-exports-info": "^1.6.0",
+ "object-keys": "^1.1.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/roslib": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/roslib/-/roslib-1.4.1.tgz",
+ "integrity": "sha512-l3BOHqG99RHb73XROykj8o2rRaUqqYwN0E6C1EkH+R1GIfDjMaUGPaCNEoKKmsXT0Vu0EOyL1BudQtdVlMsgjA==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@xmldom/xmldom": "^0.8.0",
+ "cbor-js": "^0.1.0",
+ "eventemitter2": "^6.4.0",
+ "object-assign": "^4.0.0",
+ "pngparse": "^2.0.0",
+ "socket.io": "^4.0.0",
+ "webworkify": "^1.5.0",
+ "webworkify-webpack": "^2.1.5",
+ "ws": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz",
+ "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.9",
+ "call-bound": "^1.0.4",
+ "get-intrinsic": "^1.3.0",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4",
+ "side-channel-list": "^1.0.1",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/socket.io": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.3.tgz",
+ "integrity": "sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "cors": "~2.8.5",
+ "debug": "~4.4.1",
+ "engine.io": "~6.6.0",
+ "socket.io-adapter": "~2.5.2",
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.2.0"
+ }
+ },
+ "node_modules/socket.io-adapter": {
+ "version": "2.5.8",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.8.tgz",
+ "integrity": "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "~4.4.1",
+ "ws": "~8.21.0"
+ }
+ },
+ "node_modules/socket.io-parser": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz",
+ "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stable-hash": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
+ "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
+ "license": "MIT"
+ },
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
+ "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "internal-slot": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "regexp.prototype.flags": "^1.5.3",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz",
+ "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.9",
+ "call-bound": "^1.0.4",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.24.2",
+ "es-object-atoms": "^1.1.2",
+ "has-property-descriptors": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz",
+ "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.9",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "license": "MIT",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "tinyglobby": "^0.2.11",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz",
+ "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==",
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.12",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.18.2",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/resolve": {
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "license": "MIT"
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz",
+ "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.9",
+ "for-each": "^0.3.5",
+ "gopd": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "possible-typed-array-names": "^1.1.0",
+ "reflect.getprototypeof": "^1.0.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/unrs-resolver": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz",
+ "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "napi-postinstall": "^0.3.4"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unrs-resolver"
+ },
+ "optionalDependencies": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.12.2",
+ "@unrs/resolver-binding-android-arm64": "1.12.2",
+ "@unrs/resolver-binding-darwin-arm64": "1.12.2",
+ "@unrs/resolver-binding-darwin-x64": "1.12.2",
+ "@unrs/resolver-binding-freebsd-x64": "1.12.2",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.12.2",
+ "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2",
+ "@unrs/resolver-binding-linux-loong64-musl": "1.12.2",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.12.2",
+ "@unrs/resolver-binding-linux-x64-musl": "1.12.2",
+ "@unrs/resolver-binding-openharmony-arm64": "1.12.2",
+ "@unrs/resolver-binding-wasm32-wasi": "1.12.2",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.12.2"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "license": "MIT",
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webworkify": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz",
+ "integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==",
+ "license": "MIT"
+ },
+ "node_modules/webworkify-webpack": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz",
+ "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==",
+ "license": "MIT"
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.22",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz",
+ "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==",
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.9",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/yaml": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
+ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.21.4",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
+ "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/common/interfaces/robot_ui/robot-interface/package.json b/common/interfaces/robot_ui/robot-interface/package.json
new file mode 100644
index 000000000..4d4a60c21
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "robot-interface",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@fortawesome/fontawesome-svg-core": "^6.4.2",
+ "@fortawesome/free-solid-svg-icons": "^6.4.2",
+ "@fortawesome/react-fontawesome": "^0.2.0",
+ "@types/node": "20.6.0",
+ "@types/react": "18.2.21",
+ "@types/react-dom": "18.2.7",
+ "@types/roslib": "^1.3.1",
+ "autoprefixer": "10.4.15",
+ "eslint": "8.49.0",
+ "eslint-config-next": "13.4.19",
+ "next": "13.4.19",
+ "postcss": "8.4.29",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "roslib": "^1.3.0",
+ "tailwindcss": "3.3.3",
+ "typescript": "5.2.2"
+ }
+}
diff --git a/common/interfaces/robot_ui/robot-interface/postcss.config.js b/common/interfaces/robot_ui/robot-interface/postcss.config.js
new file mode 100644
index 000000000..12a703d90
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/common/interfaces/robot_ui/robot-interface/public/objects/banana.png b/common/interfaces/robot_ui/robot-interface/public/objects/banana.png
new file mode 100644
index 000000000..b66917c60
Binary files /dev/null and b/common/interfaces/robot_ui/robot-interface/public/objects/banana.png differ
diff --git a/common/interfaces/robot_ui/robot-interface/public/objects/cup.png b/common/interfaces/robot_ui/robot-interface/public/objects/cup.png
new file mode 100644
index 000000000..62189b370
Binary files /dev/null and b/common/interfaces/robot_ui/robot-interface/public/objects/cup.png differ
diff --git a/common/interfaces/robot_ui/robot-interface/public/tiago.jpg b/common/interfaces/robot_ui/robot-interface/public/tiago.jpg
new file mode 100644
index 000000000..172458513
Binary files /dev/null and b/common/interfaces/robot_ui/robot-interface/public/tiago.jpg differ
diff --git a/common/interfaces/robot_ui/robot-interface/tailwind.config.ts b/common/interfaces/robot_ui/robot-interface/tailwind.config.ts
new file mode 100644
index 000000000..ecdd58897
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/tailwind.config.ts
@@ -0,0 +1,15 @@
+import type { Config } from "tailwindcss";
+
+const config: Config = {
+ content: [
+ "./pages/**/*.{js,ts,jsx,tsx,mdx}",
+ "./components/**/*.{js,ts,jsx,tsx,mdx}",
+ "./app/**/*.{js,ts,jsx,tsx,mdx}",
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+};
+
+export default config;
diff --git a/common/interfaces/robot_ui/robot-interface/tsconfig.json b/common/interfaces/robot_ui/robot-interface/tsconfig.json
new file mode 100644
index 000000000..90e434d7a
--- /dev/null
+++ b/common/interfaces/robot_ui/robot-interface/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [{ "name": "next" }],
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/common/interfaces/robot_ui/scripts/build b/common/interfaces/robot_ui/scripts/build
new file mode 100755
index 000000000..adca46937
--- /dev/null
+++ b/common/interfaces/robot_ui/scripts/build
@@ -0,0 +1,9 @@
+#!/usr/bin/env python3
+from ament_index_python.packages import get_package_share_directory
+import os
+import subprocess
+
+pkg_dir = get_package_share_directory("robot_ui")
+ui_dir = os.path.join(pkg_dir, "robot-interface")
+os.chdir(ui_dir)
+subprocess.call("npm install && chmod +x node_modules/.bin/next && node_modules/.bin/next build", shell=True)
diff --git a/common/interfaces/robot_ui/scripts/dev b/common/interfaces/robot_ui/scripts/dev
new file mode 100755
index 000000000..90a98aeb1
--- /dev/null
+++ b/common/interfaces/robot_ui/scripts/dev
@@ -0,0 +1,9 @@
+#!/usr/bin/env python3
+from ament_index_python.packages import get_package_share_directory
+import os
+import subprocess
+
+pkg_dir = get_package_share_directory("robot_ui")
+ui_dir = os.path.join(pkg_dir, "robot-interface")
+os.chdir(ui_dir)
+subprocess.call("npm install && chmod +x node_modules/.bin/next && node_modules/.bin/next dev", shell=True)
diff --git a/common/interfaces/robot_ui/scripts/start b/common/interfaces/robot_ui/scripts/start
new file mode 100755
index 000000000..f0cdab8f6
--- /dev/null
+++ b/common/interfaces/robot_ui/scripts/start
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+from ament_index_python.packages import get_package_share_directory
+import os
+import subprocess
+
+pkg_dir = get_package_share_directory("robot_ui")
+ui_dir = os.path.join(pkg_dir, "robot-interface")
+os.chdir(ui_dir)
+
+if not os.path.exists(os.path.join(ui_dir, ".next", "BUILD_ID")):
+ print("Run the build script first!")
+ exit(1)
+
+subprocess.call("npm install && chmod +x node_modules/.bin/next && node_modules/.bin/next start -p 3002", shell=True)
diff --git a/common/simulation/monitor.sh b/common/simulation/monitor.sh
new file mode 100755
index 000000000..6817a0c02
--- /dev/null
+++ b/common/simulation/monitor.sh
@@ -0,0 +1,98 @@
+#!/usr/bin/env bash
+# ./monitor.sh # report completo
+# ./monitor.sh --watch-bt # in più: cattura 20s di /behavior_tree_log
+# # (lancialo MENTRE il robot naviga/spinna!)
+
+set -uo pipefail
+
+REPORT="nav_report_$(date +%Y%m%d_%H%M%S).txt"
+WATCH_BT=false
+[ "${1:-}" = "--watch-bt" ] && WATCH_BT=true
+
+log() { echo -e "$@" | tee -a "$REPORT"; }
+section() { log "\n============================================================"; log "== $1"; log "============================================================"; }
+run() {
+ # run
+ local desc="$1"; local tmo="$2"; shift 2
+ log "\n--- $desc"
+ log "\$ $*"
+ timeout "$tmo" "$@" 2>&1 | head -60 | tee -a "$REPORT"
+ local rc=${PIPESTATUS[0]}
+ [ "$rc" = "124" ] && log "[TIMEOUT dopo ${tmo}s]"
+ [ "$rc" != "0" ] && [ "$rc" != "124" ] && log "[exit code: $rc]"
+ return 0
+}
+
+log "NAV DIAGNOSTIC REPORT — $(date)"
+log "host: $(hostname) ROS_DOMAIN_ID=${ROS_DOMAIN_ID:-unset}"
+
+# ------------------------------------------------------------------ 1. NODI
+section "1. NODI ATTIVI (chi sta girando?)"
+run "Tutti i nodi di navigazione" 10 bash -c "ros2 node list | grep -E 'amcl|bt_nav|planner|controller_server|behavior_server|map_server|smoother|velocity|lifecycle|twist_mux|mobile_base|laser|direct_laser' | sort"
+run "DOPPIONI? (stesso nodo due volte = due stack attivi!)" 10 bash -c "ros2 node list | sort | uniq -d"
+
+# ------------------------------------------------------------ 2. LIFECYCLE
+section "2. STATO LIFECYCLE (devono essere 'active')"
+for n in /bt_navigator /planner_server /controller_server /behavior_server /amcl /map_server; do
+ run "lifecycle $n" 8 ros2 lifecycle get "$n"
+done
+
+# ------------------------------------------------------------------ 3. ACTION
+section "3. ACTION SERVER"
+run "Action di navigazione presenti" 10 bash -c "ros2 action list | grep -E 'navigate|follow|spin|backup|compute'"
+
+# --------------------------------------------------------------- 4. SENSORI
+section "4. SENSORI E TOPIC VITALI"
+run "Topic scan disponibili" 10 bash -c "ros2 topic list | grep -i scan"
+run "Frequenza /scan_raw (5s)" 8 ros2 topic hz /scan_raw --window 20
+run "Frequenza /scan (5s, se esiste)" 8 ros2 topic hz /scan --window 20
+
+# ------------------------------------------------------------------ 5. TF
+section "5. TF (map->odom->base_footprint)"
+run "map -> base_footprint" 8 bash -c "ros2 run tf2_ros tf2_echo map base_footprint 2>&1 | head -8"
+run "odom -> base_footprint (da fermo NON deve vibrare)" 8 bash -c "ros2 run tf2_ros tf2_echo odom base_footprint 2>&1 | head -8"
+
+# ---------------------------------------------------------- 6. PARAMETRI CHIAVE
+section "6. PARAMETRI CHIAVE (planner/controller/costmap/BT)"
+run "Planner plugins" 8 ros2 param get /planner_server planner_plugins
+run "Planner type" 8 ros2 param get /planner_server GridBased.plugin
+run "Planner tolerance" 8 ros2 param get /planner_server GridBased.tolerance
+run "Controller plugins" 8 ros2 param get /controller_server controller_plugins
+run "Controller type (DWB? MPPI?)" 8 ros2 param get /controller_server FollowPath.plugin
+run "BT XML in uso" 8 ros2 param get /bt_navigator default_nav_to_pose_bt_xml
+run "GLOBAL robot_radius" 8 ros2 param get /global_costmap/global_costmap robot_radius
+run "GLOBAL inflation_radius" 8 ros2 param get /global_costmap/global_costmap inflation_layer.inflation_radius
+run "GLOBAL cost_scaling" 8 ros2 param get /global_costmap/global_costmap inflation_layer.cost_scaling_factor
+run "GLOBAL layers" 8 ros2 param get /global_costmap/global_costmap plugins
+run "LOCAL inflation_radius" 8 ros2 param get /local_costmap/local_costmap inflation_layer.inflation_radius
+run "LOCAL layers" 8 ros2 param get /local_costmap/local_costmap plugins
+
+# --------------------------------------------------------- 7. CATENA VELOCITÀ
+section "7. CATENA cmd_vel (controller -> smoother -> twist_mux -> base)"
+run "Topic cmd_vel esistenti" 10 bash -c "ros2 topic list | grep -i -E 'cmd_vel|nav_vel'"
+run "twist_mux: input/output" 10 bash -c "ros2 node info /twist_mux 2>/dev/null | sed -n '/Subscribers/,/Publishers/p'"
+run "Chi pubblica il comando base" 10 bash -c "for t in /cmd_vel /nav_vel /mobile_base_controller/cmd_vel /mobile_base_controller/cmd_vel_unstamped; do echo \"== \$t\"; ros2 topic info \$t 2>/dev/null | grep -E 'Type|count'; done"
+
+# ------------------------------------------------------------ 8. LOCALIZZAZIONE
+section "8. LOCALIZZAZIONE"
+run "AMCL: posa stimata (1 msg)" 8 bash -c "ros2 topic echo /amcl_pose --once 2>/dev/null | head -20"
+run "Particelle: topic presente?" 8 bash -c "ros2 topic list | grep -E 'particle'"
+
+# ------------------------------------------------------- 9. COSTMAP SNAPSHOT
+section "9. COSTMAP (pubblicano?)"
+run "Global costmap freq (5s)" 8 ros2 topic hz /global_costmap/costmap --window 5
+run "Local costmap freq (5s)" 8 ros2 topic hz /local_costmap/costmap --window 5
+
+# ----------------------------------------------------------- 10. BT LOG LIVE
+if $WATCH_BT; then
+ section "10. BEHAVIOR TREE LOG (20s) — cosa fallisce prima di Spin?"
+ log "(cattura in corso: manda ORA il goal / riproduci il problema...)"
+ run "behavior_tree_log (20s)" 22 bash -c "timeout 20 ros2 topic echo /behavior_tree_log 2>/dev/null | grep -E 'node_name|current_status|previous_status' | head -200"
+else
+ section "10. BEHAVIOR TREE LOG — saltato"
+ log "Rilancia con: ./monitor.sh --watch-bt MENTRE il robot naviga/spinna."
+fi
+
+section "FINE REPORT"
+log "\nReport salvato in: $REPORT"
+log "Invia questo file per la diagnosi."
diff --git a/common/speech/lasr_speech_recognition_whisper/lasr_speech_recognition_whisper/transcribe_microphone_server.py b/common/speech/lasr_speech_recognition_whisper/lasr_speech_recognition_whisper/transcribe_microphone_server.py
index 08eb8dd17..ce23cf102 100755
--- a/common/speech/lasr_speech_recognition_whisper/lasr_speech_recognition_whisper/transcribe_microphone_server.py
+++ b/common/speech/lasr_speech_recognition_whisper/lasr_speech_recognition_whisper/transcribe_microphone_server.py
@@ -1,373 +1,246 @@
-#!/usr/bin python3
+#!/usr/bin/env python3
import os
-import sounddevice # needed to remove ALSA error messages
-import argparse
-from typing import Optional
-from dataclasses import dataclass
+import queue
+import datetime
+from collections import deque
from pathlib import Path
from timeit import default_timer as timer
+from typing import Optional
import numpy as np
import torch
+import whisper
+import sounddevice as sd
+import soundfile as sf
import rclpy
from rclpy.node import Node
from rclpy.action.server import ActionServer, CancelResponse
-
-import speech_recognition as sr # type: ignore
-from lasr_speech_recognition_interfaces.action import TranscribeSpeech # type: ignore
from rclpy.executors import ExternalShutdownException
-from std_msgs.msg import String # type: ignore
-from lasr_speech_recognition_whisper.cache import ModelCache # type: ignore
-
-# TODO: argpars -> ROS2 params, test behaviour of preemption
-
-
-@dataclass
-class speech_model_params:
- """Class for storing speech recognition model parameters.
-
- Args:
- model_name (str, optional): Name of the speech recognition model. Defaults to "medium.en".
- Must be a valid Whisper model name.
- device (str, optional): Device to run the model on. Defaults to "cuda" if available, otherwise "cpu".
- start_timeout (float): Max number of seconds of silence when starting listening before stopping. Defaults to 5.0.
- phrase_duration (Optional[float]): Max number of seconds of the phrase. Defaults to 10 seconds.
- sample_rate (int): Sample rate of the microphone. Defaults to 16000Hz.
- mic_device (Optional[str]): Microphone device index or name. Defaults to None.
- timer_duration (Optional[int]): Duration of the timer for adjusting the microphone for ambient noise. Defaults to 20 seconds.
- warmup (bool): Whether to warmup the model by running inference on a test file. Defaults to True.
- energy_threshold (Optional[int]): Energy threshold for silence detection. Using this disables automatic adjustment. Defaults to None.
- pause_threshold (Optional[float]): Seconds of non-speaking audio before a phrase is considered complete. Defaults to 0.8 seconds.
- """
-
- model_name: str = "small.en"
- device: str = "cuda" if torch.cuda.is_available() else "cpu"
- start_timeout: float = 5.0
- phrase_duration: Optional[float] = 10
- sample_rate: int = 16000
- mic_device: Optional[str] = None
- timer_duration: Optional[int] = 20
- warmup: bool = False
- energy_threshold: Optional[int] = None
- pause_threshold: Optional[float] = 2.0
+
+from lasr_speech_recognition_interfaces.action import TranscribeSpeech
+from std_msgs.msg import String
+
+SAMPLE_RATE = 16000
+CHUNK_SIZE = 512
+MAX_PHRASE_CHUNKS = int(15.0 * SAMPLE_RATE / CHUNK_SIZE)
+PRE_ROLL_CHUNKS = 16 # ~512 ms
class TranscribeSpeechAction(Node):
- # create messages that are used to publish feedback/result
- _feedback = TranscribeSpeech.Feedback()
_result = TranscribeSpeech.Result()
- def __init__(self, action_name: str, model_params: speech_model_params) -> None:
- """Starts an action server for transcribing speech.
-
- Args:
- action_name (str): Name of the action server.
- """
- Node.__init__(self, "transcribe_speech_action")
- self._action_name = action_name
- self._model_params = model_params
- self._transcription_server = self.create_publisher(
+ def __init__(self) -> None:
+ super().__init__("transcribe_speech_action")
+
+ self.declare_parameter("model", "base.en")
+ self.declare_parameter("device", "cuda" if torch.cuda.is_available() else "cpu")
+ self.declare_parameter("mic_device", "default")
+ self.declare_parameter("start_timeout", 5.0)
+ self.declare_parameter("pause_threshold", 2.0)
+ self.declare_parameter("save_audio", True)
+ self.declare_parameter("save_audio_dir", "/tmp/whisper_recordings")
+
+ self._model_name = self.get_parameter("model").value
+ self._device = self.get_parameter("device").value
+ self._mic_device = self.get_parameter("mic_device").value or None
+ self._start_timeout = self.get_parameter("start_timeout").value
+ self._pause_threshold = self.get_parameter("pause_threshold").value
+ self._save_audio = self.get_parameter("save_audio").value
+ self._save_audio_dir = Path(self.get_parameter("save_audio_dir").value)
+ if self._save_audio:
+ self._save_audio_dir.mkdir(parents=True, exist_ok=True)
+ self.get_logger().info(f"Saving audio to {self._save_audio_dir}")
+
+ self._transcription_pub = self.create_publisher(
String, "/live_speech_transcription", 10
)
- model_cache = ModelCache()
- self._model = model_cache.load_model(
- self._model_params.model_name,
- self._model_params.device,
- self._model_params.warmup,
+ self.get_logger().info(
+ f"Loading Whisper model '{self._model_name}' on {self._device}..."
)
- # Configure the speech recogniser object and adjust for ambient noise
- self.recogniser = self._configure_recogniser()
+ self._model = whisper.load_model(self._model_name, device=self._device)
+ self.get_logger().info("Warming up Whisper...")
+ self._model.transcribe(
+ np.zeros(SAMPLE_RATE, dtype=np.float32), fp16=self._device == "cuda"
+ )
+
+ from silero_vad import load_silero_vad
+
+ self._vad_model = load_silero_vad()
+
+ self._audio_queue: queue.Queue = queue.Queue()
+ self._pre_roll: deque = deque(maxlen=PRE_ROLL_CHUNKS)
+ self._collecting = False
+
+ self._stream = sd.InputStream(
+ samplerate=SAMPLE_RATE,
+ channels=1,
+ dtype="float32",
+ blocksize=CHUNK_SIZE,
+ device=self._resolve_mic_device(),
+ callback=self._audio_callback,
+ )
+ self._stream.start()
- # Set up the action server and register execution callback
self._action_server = ActionServer(
self,
TranscribeSpeech,
- self._action_name,
+ "transcribe_speech",
execute_callback=self.execute_cb,
cancel_callback=self.cancel_cb,
- # auto_start=False, # not required in ROS2 ?? (cb is async)
)
- self._action_server.register_cancel_callback(self.cancel_cb)
- self._listening = False
-
- # self._action_server.start() # not required in ROS2
- self.get_logger().info(f"Speech Action server {self._action_name} started")
-
- def _configure_microphone(self) -> sr.Microphone:
- """Configures the microphone for listening to speech based on the
- microphone device index or name.
-
- Returns: microphone object
- """
-
- if self._model_params.mic_device is None:
- # If no microphone device is specified, use the system default microphone
- return sr.Microphone(sample_rate=self._model_params.sample_rate)
- elif self._model_params.mic_device.isdigit():
- return sr.Microphone(
- device_index=int(self._model_params.mic_device),
- sample_rate=self._model_params.sample_rate,
- )
- else:
- microphones = enumerate(sr.Microphone.list_microphone_names())
- for index, name in microphones:
- if self._model_params.mic_device in name:
- return sr.Microphone(
- device_index=index, sample_rate=self._model_params.sample_rate
- )
- raise ValueError(
- f"Could not find microphone with name: {self._model_params.mic_device}"
- )
-
- def _configure_recogniser(
- self,
- energy_threshold: Optional[float] = None,
- pause_threshold: Optional[float] = None,
- ) -> sr.Recognizer:
- """Configures the speech recogniser object.
-
- Args:
- energy_threshold (float): Energy threshold for silence detection. Using this disables automatic adjustment.
- pause_threshold (float): Seconds of non-speaking audio before a phrase is considered complete.
-
- Returns:
- sr.Recognizer: speech recogniser object.
- """
- self._listening = True
- recogniser = sr.Recognizer()
-
- if pause_threshold:
- recogniser.pause_threshold = pause_threshold
-
- elif self._model_params.pause_threshold:
- recogniser.pause_threshold = self._model_params.pause_threshold
-
- if energy_threshold:
- recogniser.dynamic_energy_threshold = False
- recogniser.energy_threshold = energy_threshold
- return recogniser
-
- if self._model_params.energy_threshold:
- recogniser.dynamic_energy_threshold = False
- recogniser.energy_threshold = self._model_params.energy_threshold
- return recogniser
-
- with self._configure_microphone() as source:
- recogniser.adjust_for_ambient_noise(source)
- self._listening = False
- return recogniser
-
- def cancel_cb(self, goal_handle) -> CancelResponse:
- """Callback for cancelling the action server.
- Sets server to 'canceled' state.
- """
- cancel_str = f"{self._action_name} has been cancelled"
- self.get_logger().info(cancel_str)
- self._result.sequence = cancel_str
-
- # self._action_server.set_preempted(result=self._result, text=cancel_str)
- goal_handle.canceled()
-
- return CancelResponse.ACCEPT # TODO decide if always accept cancellation
- async def execute_cb(self, goal_handle) -> None:
- """Callback for executing the action server.
+ self.get_logger().info(
+ f"Whisper server ready (model={self._model_name}, device={self._device})"
+ )
- Checks for cancellation before listening and before and after transcribing, returning
- if cancellation is requested.
+ def _resolve_mic_device(self) -> Optional[int]:
+ if self._mic_device is None:
+ return None
+ if self._mic_device.isdigit():
+ return int(self._mic_device)
+ for idx, info in enumerate(sd.query_devices()):
+ if self._mic_device in info["name"]:
+ return idx
+ raise ValueError(f"Could not find microphone: {self._mic_device}")
+
+ def _audio_callback(
+ self, indata: np.ndarray, frames: int, time_info, status
+ ) -> None:
+ chunk = indata[:, 0].copy()
+ self._pre_roll.append(chunk)
+ if self._collecting:
+ self._audio_queue.put_nowait(chunk)
- Args:
- :param goal_handle: handles the goal request, and provides access to the goal parameters
- """
+ def cancel_cb(self, goal_handle) -> CancelResponse:
+ self.get_logger().info("Goal cancelled")
+ self._collecting = False
+ return CancelResponse.ACCEPT
+ def execute_cb(self, goal_handle):
goal = goal_handle.request
-
- self.get_logger().info("Request Received")
- if goal_handle.is_cancel_requested:
- return
-
- if goal.energy_threshold > 0.0 and goal.max_phrase_limit > 0.0:
- self.recogniser = self._configure_recogniser(
- goal.energy_threshold, goal.max_phrase_limit
- )
- elif goal.energy_threshold > 0.0:
- self.recogniser = self._configure_recogniser(goal.energy_threshold)
- elif goal.max_phrase_limit > 0.0:
- self.recogniser = self._configure_recogniser(
- pause_threshold=goal.max_phrase_limit
- )
-
- with self._configure_microphone() as src:
- self._listening = True
- wav_data = self.recogniser.listen(
- src,
- timeout=self._model_params.start_timeout,
- phrase_time_limit=self._model_params.phrase_duration,
- ).get_wav_data()
- # Magic number 32768.0 is the maximum value of a 16-bit signed integer
- float_data = (
- np.frombuffer(wav_data, dtype=np.int16).astype(np.float32, order="C")
- / 32768.0
+ pause_threshold = (
+ goal.max_phrase_limit
+ if goal.max_phrase_limit > 0.0
+ else self._pause_threshold
)
-
- if goal_handle.is_cancel_requested:
- self._listening = False
- self.get_logger().info("Goal was cancelled during execution.")
- goal_handle.canceled()
+ max_silent_chunks = int(pause_threshold * SAMPLE_RATE / CHUNK_SIZE)
+ max_start_chunks = int(self._start_timeout * SAMPLE_RATE / CHUNK_SIZE)
+
+ self._vad_model.reset_states()
+ self._audio_queue = queue.Queue()
+ self._collecting = True
+
+ speech_started = False
+ silent_chunks = 0
+ start_chunks_elapsed = 0
+ collected_chunks = []
+
+ try:
+ while True:
+ if goal_handle.is_cancel_requested:
+ self._collecting = False
+ goal_handle.canceled()
+ self._result.sequence = ""
+ return self._result
+
+ try:
+ chunk = self._audio_queue.get(timeout=CHUNK_SIZE / SAMPLE_RATE)
+ except queue.Empty:
+ continue
+
+ is_speech = (
+ self._vad_model(
+ torch.from_numpy(chunk).unsqueeze(0), SAMPLE_RATE
+ ).item()
+ > 0.5
+ )
+
+ if not speech_started:
+ start_chunks_elapsed += 1
+ if start_chunks_elapsed > max_start_chunks:
+ self.get_logger().warn("Start timeout — no speech detected.")
+ self._collecting = False
+ self._result.sequence = ""
+ goal_handle.succeed()
+ return self._result
+ if is_speech:
+ speech_started = True
+ collected_chunks = list(self._pre_roll) + [chunk]
+ else:
+ collected_chunks.append(chunk)
+ if is_speech:
+ silent_chunks = 0
+ else:
+ silent_chunks += 1
+ if silent_chunks >= max_silent_chunks:
+ break
+ if len(collected_chunks) >= MAX_PHRASE_CHUNKS:
+ self.get_logger().warn("Max phrase duration reached.")
+ break
+
+ except Exception as e:
+ self.get_logger().error(f"Audio collection error: {e}")
+ self._collecting = False
+ self._result.sequence = ""
+ goal_handle.abort()
+ return self._result
+ finally:
+ self._collecting = False
+
+ try:
+ float_data = np.concatenate(collected_chunks)
+ start = timer()
+ phrase = self._model.transcribe(float_data, fp16=self._device == "cuda")[
+ "text"
+ ].strip()
+ self.get_logger().info(f"Transcribed in {timer() - start:.2f}s: '{phrase}'")
+ except Exception as e:
+ self.get_logger().error(f"Whisper error: {e}")
+ self._result.sequence = ""
+ goal_handle.abort()
return self._result
- self.get_logger().info(f"Transcribing phrase with Whisper...")
- transcription_start_time = timer()
- # Cast to fp16 if using GPU
- phrase = self._model.transcribe(
- float_data, fp16=self._model_params.device == "cuda"
- )["text"]
- transcription_end_time = timer()
- self.get_logger().info(f"Transcription finished!")
- self.get_logger().info(
- f"Time taken: {transcription_end_time - transcription_start_time:.2f}s"
- )
- from std_msgs.msg import String as StringMsg
+ if phrase.lower() in {"", "you", "thank you.", "thanks.", "."}:
+ self.get_logger().warn(f"Hallucination filtered: '{phrase}'")
+ phrase = ""
- self._transcription_server.publish(StringMsg(data=phrase))
- if goal_handle.is_cancel_requested:
- self._listening = False
- return
+ if self._save_audio and len(float_data) > 0:
+ self._save_recording(float_data, phrase)
+ self._transcription_pub.publish(String(data=phrase))
self._result.sequence = phrase
- self.get_logger().info(f"Transcribed phrase: {phrase}")
- self.get_logger().info(f"{self._action_name} has succeeded")
-
goal_handle.succeed()
+ return self._result
- # Have this at the very end to not disrupt the action server
- self._listening = False
+ def _save_recording(self, float_data: np.ndarray, transcript: str) -> None:
+ stamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S_%f")
+ wav_path = self._save_audio_dir / f"{stamp}.wav"
+ txt_path = self._save_audio_dir / f"{stamp}.txt"
+ try:
+ sf.write(str(wav_path), float_data, SAMPLE_RATE, subtype="PCM_16")
+ txt_path.write_text(transcript)
+ self.get_logger().info(f"Saved recording: {wav_path.name}")
+ except Exception as e:
+ self.get_logger().warn(f"Failed to save recording: {e}")
- return self._result
+ def destroy_node(self):
+ self._stream.stop()
+ self._stream.close()
+ super().destroy_node()
-def parse_args() -> dict:
- """Parses the command line arguments into a name: value dictinoary.
-
- Returns:
- dict: Dictionary of name: value pairs of command line arguments.
- """
- parser = argparse.ArgumentParser(
- description="Starts an action server for transcribing speech."
- )
-
- parser.add_argument(
- "--action_name",
- type=str,
- default="transcribe_speech",
- help="Name of the action server.",
- )
- parser.add_argument(
- "--model_name",
- type=str,
- default="small.en",
- help="Name of the speech recognition model.",
- )
- parser.add_argument(
- "--device",
- type=str,
- default="cuda" if torch.cuda.is_available() else "cpu",
- help="Device to run the model on.",
- )
- parser.add_argument(
- "--start_timeout",
- type=float,
- default=5.0,
- help="Timeout for listening for the start of a phrase.",
- )
- parser.add_argument(
- "--phrase_duration",
- type=float,
- default=10,
- help="Maximum phrase duration after starting listening in seconds.",
- )
- parser.add_argument(
- "--sample_rate", type=int, default=16000, help="Sample rate of the microphone."
- )
- parser.add_argument(
- "--mic_device", type=str, default=None, help="Microphone device index or name"
- )
- parser.add_argument(
- "--no_warmup",
- action="store_true",
- help="Disable warming up the model by running inference on a test file.",
- )
-
- parser.add_argument(
- "--energy_threshold",
- type=int,
- default=None,
- help="Energy threshold for silence detection. Using this disables automatic adjustment",
- )
-
- parser.add_argument(
- "--pause_threshold",
- type=float,
- default=2.0,
- help="Seconds of non-speaking audio before a phrase is considered complete.",
- )
-
- args, unknown = parser.parse_known_args()
- return vars(args)
-
-
-def configure_model_params(config: dict) -> speech_model_params:
- """Configures the speech model parameters based on the provided
- command line parameters.
-
- Args:
- config (dict): Command line parameters parsed in dictionary form.
-
- Returns:
- speech_model_params: dataclass containing the speech model parameters
- """
- model_params = speech_model_params()
- if config["model_name"]:
- model_params.model_name = "small.en"
- if config["device"]:
- model_params.device = config["device"]
- if config["start_timeout"]:
- model_params.start_timeout = config["start_timeout"]
- if config["phrase_duration"]:
- model_params.phrase_duration = config["phrase_duration"]
- if config["sample_rate"]:
- model_params.sample_rate = config["sample_rate"]
- if config["mic_device"]:
- model_params.mic_device = config["mic_device"]
- if config["no_warmup"]:
- model_params.warmup = False
- # if config["energy_threshold"]:
- # model_params.energy_threshold = config["energy_threshold"]
- if config["pause_threshold"]:
- model_params.pause_threshold = config["pause_threshold"]
-
- return model_params
-
-
-def configure_whisper_cache() -> None:
- """Configures the whisper cache directory."""
+def main(args=None):
whisper_cache = os.path.join(str(Path.home()), ".cache", "whisper")
os.makedirs(whisper_cache, exist_ok=True)
- # Environmental variable required to run whisper locally
os.environ["TIKTOKEN_CACHE_DIR"] = whisper_cache
-
-def main(args=None):
rclpy.init(args=args)
-
- configure_whisper_cache()
- config = parse_args()
-
- server = TranscribeSpeechAction("transcribe_speech", configure_model_params(config))
-
+ server = TranscribeSpeechAction()
try:
rclpy.spin(server)
except (KeyboardInterrupt, ExternalShutdownException):
pass
+ finally:
+ server.destroy_node()
diff --git a/common/speech/lasr_speech_recognition_whisper/requirements.in b/common/speech/lasr_speech_recognition_whisper/requirements.in
index 1d515543e..b899ff454 100644
--- a/common/speech/lasr_speech_recognition_whisper/requirements.in
+++ b/common/speech/lasr_speech_recognition_whisper/requirements.in
@@ -1,6 +1,6 @@
-SpeechRecognition==3.10.0
-sounddevice==0.4.6
-openai-whisper==20231117
-PyAudio~=0.2.13
-PyYaml==6.0.1
-setuptools==60.0.1
\ No newline at end of file
+SpeechRecognition
+sounddevice
+openai-whisper
+PyAudio
+PyYaml
+setuptools
\ No newline at end of file
diff --git a/common/speech/lasr_speech_recognition_whisper/requirements.txt b/common/speech/lasr_speech_recognition_whisper/requirements.txt
index eade8e0a3..3130ba20e 100644
--- a/common/speech/lasr_speech_recognition_whisper/requirements.txt
+++ b/common/speech/lasr_speech_recognition_whisper/requirements.txt
@@ -1,45 +1,12 @@
-certifi==2024.2.2 # via requests
-cffi==1.16.0 # via sounddevice
-charset-normalizer==3.3.2 # via requests
-filelock==3.14.0 # via torch, triton
-fsspec==2024.3.1 # via torch
-idna==3.7 # via requests
-jinja2==3.1.4 # via torch
-llvmlite==0.42.0 # via numba
-markupsafe==2.1.5 # via jinja2
-more-itertools==10.2.0 # via openai-whisper
-mpmath==1.3.0 # via sympy
-networkx==3.3 # via torch
-numba==0.59.1 # via openai-whisper
-numpy==1.26.4 # via numba, openai-whisper
-nvidia-cublas-cu12==12.1.3.1 # via nvidia-cudnn-cu12, nvidia-cusolver-cu12, torch
-nvidia-cuda-cupti-cu12==12.1.105 # via torch
-nvidia-cuda-nvrtc-cu12==12.1.105 # via torch
-nvidia-cuda-runtime-cu12==12.1.105 # via torch
-nvidia-cudnn-cu12==8.9.2.26 # via torch
-nvidia-cufft-cu12==11.0.2.54 # via torch
-nvidia-curand-cu12==10.3.2.106 # via torch
-nvidia-cusolver-cu12==11.4.5.107 # via torch
-nvidia-cusparse-cu12==12.1.0.106 # via nvidia-cusolver-cu12, torch
-nvidia-nccl-cu12==2.20.5 # via torch
-nvidia-nvjitlink-cu12==12.4.127 # via nvidia-cusolver-cu12, nvidia-cusparse-cu12
-nvidia-nvtx-cu12==12.1.105 # via torch
-openai-whisper==20231117 # via -r requirements.in
-pyaudio==0.2.13 # via -r requirements.in
-pycparser==2.22 # via cffi
-pyyaml==6.0.1 # via -r requirements.in
-regex==2024.4.28 # via tiktoken
-requests==2.31.0 # via speechrecognition, tiktoken
-six==1.16.0 # via python-dateutil
-sounddevice==0.4.6 # via -r requirements.in
-speechrecognition==3.10.0 # via -r requirements.in
-sympy==1.12 # via torch
-tiktoken==0.6.0 # via openai-whisper
-torch==2.3.0 # via openai-whisper
-tqdm==4.66.4 # via openai-whisper
-triton==2.3.0 # via openai-whisper, torch
-typing-extensions==4.11.0 # via torch
-urllib3==2.2.1 # via requests
-
-# The following packages are considered to be unsafe in a requirements file:
-# setuptools == 60.0.1
+torch==2.6.0
+torchaudio==2.6.0
+SpeechRecognition
+sounddevice
+openai-whisper
+PyAudio
+PyYaml
+setuptools
+numba>=0.60.0
+coverage>=7.0
+silero-vad
+soundfile
\ No newline at end of file
diff --git a/common/speech/lasr_speech_recognition_whisper/scripts/test_microphones.py b/common/speech/lasr_speech_recognition_whisper/scripts/test_microphones.py
index d14144e21..165a36afd 100755
--- a/common/speech/lasr_speech_recognition_whisper/scripts/test_microphones.py
+++ b/common/speech/lasr_speech_recognition_whisper/scripts/test_microphones.py
@@ -1,71 +1,70 @@
-#!/usr/bin python3
+#!/usr/bin/env python3
+"""Record a single utterance and save it as a WAV file for testing."""
-import os
import argparse
-import speech_recognition as sr
-import rclpy
-import sounddevice # needed to remove ALSA error messages
+import numpy as np
+import sounddevice as sd
+import soundfile as sf
-# TODO argparse -> ROS params
+SAMPLE_RATE = 16000
+DURATION = 10.0 # seconds
-def parse_args() -> dict:
- """Parse command line arguments into a dictionary.
-
- Returns:
- dict: name: value pairs of command line arguments
- """
-
- parser = argparse.ArgumentParser(description="Test microphones")
+def parse_args():
+ parser = argparse.ArgumentParser(description="Test microphone recording")
parser.add_argument(
- "-m", "--microphone", type=int, help="Microphone index", default=None
+ "-m",
+ "--microphone",
+ type=str,
+ default=None,
+ help="Microphone name substring or index (default: system default)",
)
parser.add_argument(
- "-o", "--output_dir", type=str, help="Directory to save audio files"
+ "-o",
+ "--output",
+ type=str,
+ default="/tmp/microphone_test.wav",
+ help="Output WAV file path",
+ )
+ parser.add_argument(
+ "-d",
+ "--duration",
+ type=float,
+ default=DURATION,
+ help="Recording duration in seconds",
)
-
- # return vars(parser.parse_args())
args, _ = parser.parse_known_args()
- return vars(args)
-
-
-def main(args: dict = None) -> None:
- """Generate audio files from microphone input.
-
- Args:
- args (dict): dictionary of command line arguments.
- """
-
- # Adapted from https://github.com/Uberi/speech_recognition/blob/master/examples/write_audio.py
-
- rclpy.init(args=args)
-
- parser_args = parse_args()
-
- mic_index = parser_args["microphone"]
- output_dir = parser_args["output_dir"]
-
- r = sr.Recognizer()
- r.pause_threshold = 2
- microphone = sr.Microphone(device_index=mic_index, sample_rate=16000)
- with microphone as source:
- print("Say something!")
- audio = r.listen(source, timeout=5, phrase_time_limit=10)
- print("Finished listening")
-
- with open(os.path.join(output_dir, "microphone.raw"), "wb") as f:
- f.write(audio.get_raw_data())
-
- with open(os.path.join(output_dir, "microphone.wav"), "wb") as f:
- f.write(audio.get_wav_data())
-
- with open(os.path.join(output_dir, "microphone.flac"), "wb") as f:
- f.write(audio.get_flac_data())
-
- with open(os.path.join(output_dir, "microphone.aiff"), "wb") as f:
- f.write(audio.get_aiff_data())
+ return args
+
+
+def resolve_device(mic):
+ if mic is None:
+ return None
+ if mic.isdigit():
+ return int(mic)
+ for idx, info in enumerate(sd.query_devices()):
+ if mic in info["name"]:
+ return idx
+ raise ValueError(f"Could not find microphone: {mic}")
+
+
+def main():
+ args = parse_args()
+ device = resolve_device(args.microphone)
+
+ print(f"Recording {args.duration}s at {SAMPLE_RATE}Hz... speak now!")
+ audio = sd.rec(
+ int(args.duration * SAMPLE_RATE),
+ samplerate=SAMPLE_RATE,
+ channels=1,
+ dtype="float32",
+ device=device,
+ )
+ sd.wait()
+ print("Done.")
- rclpy.shutdown()
+ sf.write(args.output, audio, SAMPLE_RATE, subtype="PCM_16")
+ print(f"Saved to {args.output}")
if __name__ == "__main__":
diff --git a/common/speech/lasr_speech_recognition_whisper/scripts/test_speech_server.py b/common/speech/lasr_speech_recognition_whisper/scripts/test_speech_server.py
index 2448e73ec..fe12995c0 100755
--- a/common/speech/lasr_speech_recognition_whisper/scripts/test_speech_server.py
+++ b/common/speech/lasr_speech_recognition_whisper/scripts/test_speech_server.py
@@ -2,65 +2,44 @@
import rclpy
from rclpy.node import Node
from rclpy.action import ActionClient
-from lasr_speech_recognition_interfaces.srv import TranscribeAudio # type: ignore
from lasr_speech_recognition_interfaces.action import TranscribeSpeech
-# https://docs.ros2.org/latest/api/rclpy/api/actions.html
-
class TestSpeechServerClient(Node):
def __init__(self):
Node.__init__(self, "listen_action_client")
+ self._client = ActionClient(self, TranscribeSpeech, "transcribe_speech")
- self.client = ActionClient(self, TranscribeSpeech, "transcribe_speech")
- self.goal_future = None
- self.result_future = None
-
- def send_goal(self, goal):
- self.get_logger().info("Waiting for Whisper server...")
- self.client.wait_for_server()
- self.get_logger().info("Server activated, sending goal...")
+ def transcribe(self) -> str:
+ self.get_logger().info("Waiting for server...")
+ self._client.wait_for_server()
+ self.get_logger().info("Sending goal...")
- self.goal_future = self.client.send_goal_async(
- goal, feedback_callback=self.feedback_cb
- ) # Returns a Future instance when the goal request has been accepted or rejected.
- self.goal_future.add_done_callback(
- self.response_cb
- ) # When received get response
+ future = self._client.send_goal_async(TranscribeSpeech.Goal())
+ rclpy.spin_until_future_complete(self, future)
- def feedback_cb(self, msg):
- self.get_logger().info(f"Received feedback: {msg.feedback}")
-
- def response_cb(self, future):
handle = future.result()
if not handle.accepted:
- self.get_logger().info("Goal was rejected")
- return
-
- self.get_logger().info("Goal was accepted")
- self.result_future = (
- handle.get_result_async()
- ) # Not using get_result() in cb, as can cause deadlock according to docs
- self.result_future.add_done_callback(self.result_cb)
+ self.get_logger().warn("Goal rejected")
+ return ""
- def result_cb(self, future):
- result = future.result().result
- self.get_logger().info(f"Transcribed Speech: {result.sequence}")
+ result_future = handle.get_result_async()
+ rclpy.spin_until_future_complete(self, result_future)
+ return result_future.result().result.sequence
def main(args=None):
rclpy.init(args=args)
- while rclpy.ok():
- goal = TranscribeSpeech.Goal()
- client = TestSpeechServerClient()
- try:
- client.send_goal(goal)
- rclpy.spin(client)
- except KeyboardInterrupt:
- client.get_logger().info("Shutting down...")
- finally:
- client.destroy_node()
- rclpy.shutdown()
+ client = TestSpeechServerClient()
+ try:
+ while rclpy.ok():
+ phrase = client.transcribe()
+ client.get_logger().info(f"Transcription: '{phrase}'")
+ except KeyboardInterrupt:
+ pass
+ finally:
+ client.destroy_node()
+ rclpy.shutdown()
if __name__ == "__main__":
diff --git a/common/speech/lasr_speech_recognition_whisper/setup.py b/common/speech/lasr_speech_recognition_whisper/setup.py
index 08544bcda..e16453c81 100755
--- a/common/speech/lasr_speech_recognition_whisper/setup.py
+++ b/common/speech/lasr_speech_recognition_whisper/setup.py
@@ -11,6 +11,7 @@
class InstallCommand(setuptools.command.install.install):
def run(self):
super().run()
+ os.environ["PIP_EXTRA_INDEX_URL"] = "https://download.pytorch.org/whl/cu124"
ament_virtualenv.install.install_venv(
install_base=self.install_base,
scripts_base=self.install_scripts,
diff --git a/common/vision/lasr_vision_reid/lasr_vision_reid/add_face.py b/common/vision/lasr_vision_reid/lasr_vision_reid/add_face.py
index e10482b01..1566c4402 100644
--- a/common/vision/lasr_vision_reid/lasr_vision_reid/add_face.py
+++ b/common/vision/lasr_vision_reid/lasr_vision_reid/add_face.py
@@ -84,7 +84,7 @@ def main():
# camera = node.declare_parameter("~camera", "head_front_camera").value
name = node.declare_parameter("~name", "guest1").value # originally jared
num_images = node.declare_parameter("~num_images", 10).value
- # image_topic = "/image_raw"
+ image_topic = "/image_raw"
node.get_logger().info(f"Image topic: {image_topic}")
diff --git a/common/vision/lasr_vision_reid/lasr_vision_reid/service.py b/common/vision/lasr_vision_reid/lasr_vision_reid/service.py
index 81a27eaca..d8a0f6cd9 100644
--- a/common/vision/lasr_vision_reid/lasr_vision_reid/service.py
+++ b/common/vision/lasr_vision_reid/lasr_vision_reid/service.py
@@ -71,6 +71,7 @@ def __init__(self):
self._add_face_service = self.create_service(
AddFace, "/lasr_vision_reid/add_face", self._add_face
)
+ _ = DeepFace.build_model("VGG-Face")
def _extract_embeddings(self, im: np.ndarray) -> List[np.ndarray]:
"""
@@ -127,7 +128,7 @@ def _recognise(
img_path=cv_im,
model_name="VGG-Face",
enforce_detection=False,
- detector_backend="retinaface",
+ detector_backend="opencv",
align=True,
max_faces=None,
)
@@ -225,7 +226,7 @@ def _add_face(
img_path=cv_im,
model_name="VGG-Face",
enforce_detection=False, # allow detection attempts even if uncertain
- detector_backend="retinaface",
+ detector_backend="opencv",
align=True,
max_faces=1,
)
diff --git a/common/vision/lasr_vision_yolo/lasr_vision_yolo/service.py b/common/vision/lasr_vision_yolo/lasr_vision_yolo/service.py
index 69b66150d..ef324600f 100644
--- a/common/vision/lasr_vision_yolo/lasr_vision_yolo/service.py
+++ b/common/vision/lasr_vision_yolo/lasr_vision_yolo/service.py
@@ -238,6 +238,8 @@ def _detect3d(
if transform is None:
return response
+ # TODO: Make Detection3D response stamped with frame_id so callers can detect
+ # TF failures externally instead of relying on log warnings
for result in results:
detection = Detection3D()
detection.name = result.names[result.boxes.cls.int().item()]
@@ -309,7 +311,6 @@ def _detect_keypoints3d(
self, req: YoloPoseDetection3D.Request, res: YoloPoseDetection3D.Response
) -> YoloPoseDetection3D.Response:
response = YoloPoseDetection3D.Response()
-
cv_im = self._bridge.imgmsg_to_cv2(req.image_raw, desired_encoding="bgr8")
results = self._yolo(cv_im, req.model, req.confidence, [])
depth_im = self._bridge.imgmsg_to_cv2(
@@ -332,6 +333,8 @@ def _detect_keypoints3d(
if transform is None:
return response
+ # TODO: Make Keypoint3D response stamped with frame_id so callers can detect
+ # TF failures externally instead of relying on log warnings
for result in results:
keypoints = Keypoint3DList()
for idx, name in KEYPOINT_MAPPING.items():
@@ -343,7 +346,12 @@ def _detect_keypoints3d(
conf = result.keypoints.conf.squeeze()[idx].item()
if conf > 0.0:
- z = depth_im[v, u] / 1000.0 # convert mm to meters
+ z_mm = depth_im[v, u]
+ z = z_mm / 1000.0 # convert mm to meters
+ # Skip invalid/near-camera depths (< 100mm)
+ # Allow up to 20m for distant detections (will use laser fallback if needed)
+ if z <= 0.1 or z > 20.0:
+ continue
x = z * (u - cx) / fx
y = z * (v - cy) / fy
if np.isnan(x) or np.isnan(y) or np.isnan(z):
@@ -365,7 +373,6 @@ def _detect_keypoints3d(
response.detections.append(keypoints)
self._publish_results(req, results, response)
-
return response
def _maybe_load_model(self, model_name: str) -> ultralytics.YOLO:
diff --git a/log.txt b/log.txt
deleted file mode 100644
index d7897d4a1..000000000
--- a/log.txt
+++ /dev/null
@@ -1,2662 +0,0 @@
-[INFO] [launch]: All log files can be found below /home/rexy/.ros/log/2026-06-24-16-18-29-014477-beedrill-72272
-[INFO] [launch]: Default logging verbosity is set to INFO
-[INFO] [ros2-1]: process started with pid [72276]
-[INFO] [yolo_service_node-2]: process started with pid [72278]
-[INFO] [service-3]: process started with pid [72280]
-[INFO] [vlm_service-4]: process started with pid [72282]
-[INFO] [eye_tracker_action_server-5]: process started with pid [72284]
-[INFO] [transcribe_microphone_server-6]: process started with pid [72286]
-[INFO] [hri_task_service-7]: process started with pid [72288]
-[INFO] [sm-8]: process started with pid [72290]
-[sm-8] [WARN] [1782314310.160663139] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[sm-8] [INFO] [1782314310.218874906] [hri]: [ros_clients_cache.py:get_or_create_action_client:99] Creating new action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.228116313] [hri]: [ros_clients_cache.py:get_or_create_action_client:99] Creating new action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [WARN] [1782314310.232799494] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[vlm_service-4] [INFO] [1782314310.335737519] [lasr_vlm_service]: VLM Describe People service started
-[sm-8] [INFO] [1782314310.380999502] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314310.382122523] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [WARN] [1782314310.382898050] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[transcribe_microphone_server-6] /usr/lib/python3/dist-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.4
-[transcribe_microphone_server-6] warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
-[service-3] 2026-06-24 16:18:30.551411: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
-[service-3] 2026-06-24 16:18:30.564422: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:479] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
-[service-3] 2026-06-24 16:18:30.583692: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:10575] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
-[service-3] 2026-06-24 16:18:30.583723: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1442] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
-[sm-8] [INFO] [1782314310.591038799] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[service-3] 2026-06-24 16:18:30.594600: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
-[service-3] To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
-[sm-8] [INFO] [1782314310.597337737] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/vlm/describe_people' of type 'lasr_vlm_interfaces.srv._vlm_describe_people.VlmDescribePeople'
-[sm-8] [INFO] [1782314310.602453923] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314310.622014722] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/yolo/detect_pose' of type 'lasr_vision_interfaces.srv._yolo_pose_detection.YoloPoseDetection'
-[sm-8] [INFO] [1782314310.634489757] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/lasr_vision_reid/add_face' of type 'lasr_vision_interfaces.srv._add_face.AddFace'
-[sm-8] [INFO] [1782314310.639097807] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/hri_task/query_llm' of type 'lasr_llm_interfaces.srv._hri_task_query_llm.HRITaskQueryLlm'
-[sm-8] [INFO] [1782314310.650803909] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/hri_task/query_llm' of type 'lasr_llm_interfaces.srv._hri_task_query_llm.HRITaskQueryLlm'
-[sm-8] [INFO] [1782314310.654636922] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.655887713] [hri]: [ros_clients_cache.py:get_or_create_action_client:99] Creating new action client for 'transcribe_speech' of type 'lasr_speech_recognition_interfaces.action._transcribe_speech.TranscribeSpeech'
-[sm-8] [INFO] [1782314310.685550493] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.686668641] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.687793390] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/clear_octomap' of type 'std_srvs.srv._empty.Empty'
-[sm-8] [INFO] [1782314310.695173013] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314310.696080478] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.697022153] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314310.697766200] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314310.698459656] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.699216777] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314310.699914362] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314310.700624244] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.701409183] [hri]: [ros_clients_cache.py:get_or_create_action_client:99] Creating new action client for '/lasr_vision_eye_tracker/track_eyes' of type 'lasr_vision_interfaces.action._eye_tracker.EyeTracker'
-[sm-8] [INFO] [1782314310.727718056] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314310.729238613] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314310.749830594] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [WARN] [1782314310.752976529] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[transcribe_microphone_server-6] [WARN] [1782314311.006406971] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[eye_tracker_action_server-5] [INFO] [1782314311.037425362] [eye_tracker_action_server]: Waiting for point head action server, and head action client and yolo to all be ready...
-[transcribe_microphone_server-6] [INFO] [1782314311.045665477] [whisper_mic_server]: Loading model small.en
-[ros2-1] Set parameter motions.reach_arm_vertical_gripper.joints successful
-[ros2-1] Set parameter motions.reach_arm_vertical_gripper.positions successful
-[ros2-1] Set parameter motions.reach_arm_vertical_gripper.times_from_start successful
-[ros2-1] Set parameter motions.reach_arm_horizontal_gripper.joints successful
-[ros2-1] Set parameter motions.reach_arm_horizontal_gripper.positions successful
-[ros2-1] Set parameter motions.reach_arm_horizontal_gripper.times_from_start successful
-[ros2-1] Set parameter motions.cml_arm_away.joints successful
-[ros2-1] Set parameter motions.cml_arm_away.positions successful
-[ros2-1] Set parameter motions.cml_arm_away.times_from_start successful
-[ros2-1] Set parameter motions.open_gripper.joints successful
-[ros2-1] Set parameter motions.open_gripper.positions successful
-[ros2-1] Set parameter motions.open_gripper.times_from_start successful
-[ros2-1] Set parameter motions.pre_navigation.joints successful
-[ros2-1] Set parameter motions.pre_navigation.positions successful
-[ros2-1] Set parameter motions.pre_navigation.times_from_start successful
-[ros2-1] Set parameter motions.post_navigation.joints successful
-[ros2-1] Set parameter motions.post_navigation.positions successful
-[ros2-1] Set parameter motions.post_navigation.times_from_start successful
-[ros2-1] Set parameter motions.look_left.joints successful
-[ros2-1] Set parameter motions.look_left.positions successful
-[ros2-1] Set parameter motions.look_left.times_from_start successful
-[ros2-1] Set parameter motions.look_down_left.joints successful
-[ros2-1] Set parameter motions.look_down_left.positions successful
-[ros2-1] Set parameter motions.look_down_left.times_from_start successful
-[ros2-1] Set parameter motions.look_right.joints successful
-[ros2-1] Set parameter motions.look_right.positions successful
-[ros2-1] Set parameter motions.look_right.times_from_start successful
-[ros2-1] Set parameter motions.look_down_right.joints successful
-[ros2-1] Set parameter motions.look_down_right.positions successful
-[ros2-1] Set parameter motions.look_down_right.times_from_start successful
-[ros2-1] Set parameter motions.look_centre.joints successful
-[ros2-1] Set parameter motions.look_centre.positions successful
-[ros2-1] Set parameter motions.look_centre.times_from_start successful
-[ros2-1] Set parameter motions.look_down_centre.joints successful
-[ros2-1] Set parameter motions.look_down_centre.positions successful
-[ros2-1] Set parameter motions.look_down_centre.times_from_start successful
-[ros2-1] Set parameter motions.raise_torso.joints successful
-[ros2-1] Set parameter motions.raise_torso.positions successful
-[ros2-1] Set parameter motions.raise_torso.times_from_start successful
-[ros2-1] Set parameter motions.pointing_to_the_right.joints successful
-[ros2-1] Set parameter motions.pointing_to_the_right.positions successful
-[ros2-1] Set parameter motions.pointing_to_the_right.times_from_start successful
-[ros2-1] Set parameter motions.pointing_to_the_left.joints successful
-[ros2-1] Set parameter motions.pointing_to_the_left.positions successful
-[ros2-1] Set parameter motions.pointing_to_the_left.times_from_start successful
-[ros2-1] Set parameter motions.raising_right_arm.joints successful
-[ros2-1] Set parameter motions.raising_right_arm.positions successful
-[ros2-1] Set parameter motions.raising_right_arm.times_from_start successful
-[ros2-1] Set parameter motions.raising_left_arm.joints successful
-[ros2-1] Set parameter motions.raising_left_arm.positions successful
-[ros2-1] Set parameter motions.raising_left_arm.times_from_start successful
-[ros2-1] Set parameter motions.u1l.joints successful
-[ros2-1] Set parameter motions.u1l.positions successful
-[ros2-1] Set parameter motions.u1l.times_from_start successful
-[ros2-1] Set parameter motions.u1m.joints successful
-[ros2-1] Set parameter motions.u1m.positions successful
-[ros2-1] Set parameter motions.u1m.times_from_start successful
-[ros2-1] Set parameter motions.u1r.joints successful
-[ros2-1] Set parameter motions.u1r.positions successful
-[ros2-1] Set parameter motions.u1r.times_from_start successful
-[ros2-1] Set parameter motions.ml.joints successful
-[ros2-1] Set parameter motions.ml.positions successful
-[ros2-1] Set parameter motions.ml.times_from_start successful
-[ros2-1] Set parameter motions.mm.joints successful
-[ros2-1] Set parameter motions.mm.positions successful
-[ros2-1] Set parameter motions.mm.times_from_start successful
-[ros2-1] Set parameter motions.mr.joints successful
-[ros2-1] Set parameter motions.mr.positions successful
-[ros2-1] Set parameter motions.mr.times_from_start successful
-[sm-8] [INFO] [1782314311.172044569] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314311.173825042] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314311.174665055] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314311.180708030] [hri]: [ros_clients_cache.py:get_or_create_publisher:198] Creating new publisher for topic '/detect_all_in_polygon/debug' of type 'sensor_msgs.msg._image.Image'
-[sm-8] [INFO] [1782314311.222825242] [hri]: [ros_clients_cache.py:get_or_create_action_client:99] Creating new action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[INFO] [ros2-1]: process has finished cleanly [pid 72276]
-[INFO] [ros2-9]: process started with pid [72450]
-[sm-8] [INFO] [1782314311.284998467] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[hri_task_service-7] [INFO] [1782314311.314681979] [llm]: HRI Task Query LLM service started
-[sm-8] [INFO] [1782314311.339011377] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314311.339823176] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314311.340552566] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314311.366404057] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect_pose' of type 'lasr_vision_interfaces.srv._yolo_pose_detection.YoloPoseDetection'
-[sm-8] [INFO] [1782314311.391790383] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/lasr_vision_reid/add_face' of type 'lasr_vision_interfaces.srv._add_face.AddFace'
-[sm-8] [INFO] [1782314311.392646672] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314311.393309714] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314311.393986282] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[service-3] 2026-06-24 16:18:31.394186: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
-[sm-8] [INFO] [1782314311.394742236] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [WARN] [1782314311.399415372] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[sm-8] [INFO] [1782314311.942748260] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314312.024562894] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/vlm/describe_people' of type 'lasr_vlm_interfaces.srv._vlm_describe_people.VlmDescribePeople'
-[sm-8] [INFO] [1782314312.025619982] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[eye_tracker_action_server-5] [INFO] [1782314312.040487980] [eye_tracker_action_server]: Waiting for point head action server, and head action client and yolo to all be ready...
-[sm-8] [INFO] [1782314312.062096536] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect_pose' of type 'lasr_vision_interfaces.srv._yolo_pose_detection.YoloPoseDetection'
-[sm-8] [INFO] [1782314312.090694984] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/lasr_vision_reid/add_face' of type 'lasr_vision_interfaces.srv._add_face.AddFace'
-[sm-8] [INFO] [1782314312.091695696] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/hri_task/query_llm' of type 'lasr_llm_interfaces.srv._hri_task_query_llm.HRITaskQueryLlm'
-[sm-8] [INFO] [1782314312.092372555] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/hri_task/query_llm' of type 'lasr_llm_interfaces.srv._hri_task_query_llm.HRITaskQueryLlm'
-[sm-8] [INFO] [1782314312.093272245] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314312.093961110] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for 'transcribe_speech' of type 'lasr_speech_recognition_interfaces.action._transcribe_speech.TranscribeSpeech'
-[sm-8] [INFO] [1782314312.094574531] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314312.095274021] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314312.096030573] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/clear_octomap' of type 'std_srvs.srv._empty.Empty'
-[sm-8] [INFO] [1782314312.096659198] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314312.097259556] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314312.097871420] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314312.098492880] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314312.100731271] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314312.101505119] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314312.107790243] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314312.108963692] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314312.110537819] [hri]: [ros_clients_cache.py:get_or_create_action_client:99] Creating new action client for '/lasr_vision_eye_tracker/track_eyes' of type 'lasr_vision_interfaces.action._eye_tracker.EyeTracker'
-[sm-8] [INFO] [1782314312.191666252] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314312.192989823] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[ros2-9] Transitioning successful
-[sm-8] [INFO] [1782314312.236231020] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [WARN] [1782314312.242368204] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[service-3] 2026-06-24 16:18:32.358630: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:18:32.393606: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:18:32.394870: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[INFO] [ros2-9]: process has finished cleanly [pid 72450]
-[INFO] [ros2-10]: process started with pid [72506]
-[service-3] 2026-06-24 16:18:32.524495: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:18:32.525555: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:18:32.526534: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:47] Overriding orig_value setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.
-[service-3] 2026-06-24 16:18:32.526631: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:18:32.527618: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1928] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 1568 MB memory: -> device: 0, name: NVIDIA RTX A2000 8GB Laptop GPU, pci bus id: 0000:01:00.0, compute capability: 8.6
-[service-3] [INFO] [1782314312.814977060] [lasr_vision_reid]: Vision reid service is ready!
-[sm-8] [INFO] [1782314312.906737121] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314312.941180488] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314313.015887604] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[eye_tracker_action_server-5] [INFO] [1782314313.043288938] [eye_tracker_action_server]: Waiting for point head action server, and head action client and yolo to all be ready...
-[sm-8] [INFO] [1782314313.062121373] [hri]: [ros_clients_cache.py:get_or_create_publisher:192] Reusing existing publisher for topic '/detect_all_in_polygon/debug' of type 'sensor_msgs.msg._image.Image'
-[sm-8] [INFO] [1782314313.128720067] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314313.144572628] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314313.250464083] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314313.255578793] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314313.256621231] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314313.322502321] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect_pose' of type 'lasr_vision_interfaces.srv._yolo_pose_detection.YoloPoseDetection'
-[sm-8] [INFO] [1782314313.356861257] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/lasr_vision_reid/add_face' of type 'lasr_vision_interfaces.srv._add_face.AddFace'
-[sm-8] [INFO] [1782314313.357729761] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314313.358307921] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314313.375076326] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314313.388312421] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314313.389320347] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/lasr_vision_reid/recognise' of type 'lasr_vision_interfaces.srv._recognise3_d.Recognise3D'
-[ros2-10] Transitioning successful
-[sm-8] [INFO] [1782314313.556018462] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314313.557046557] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314313.557795747] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314313.558473671] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314313.560433558] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314313.561149495] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [WARN] [1782314313.592471987] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[INFO] [ros2-10]: process has finished cleanly [pid 72506]
-[INFO] [ros2-11]: process started with pid [72552]
-[eye_tracker_action_server-5] [INFO] [1782314314.047610579] [eye_tracker_action_server]: Waiting for point head action server, and head action client and yolo to all be ready...
-[yolo_service_node-2] [INFO] [1782314314.558525882] [yolo_service]: Loaded yolo11n-seg.pt model on cuda:0
-[yolo_service_node-2] [INFO] [1782314314.617874566] [yolo_service]: Loaded yolo11n.pt model on cuda:0
-[transcribe_microphone_server-6] [INFO] [1782314314.681806808] [whisper_mic_server]: Sucessfully loaded model small.en on cuda
-[yolo_service_node-2] [INFO] [1782314314.742882737] [yolo_service]: Loaded yolo11n-pose.pt model on cuda:0
-[yolo_service_node-2] [INFO] [1782314314.753604394] [yolo_service]: YOLO service started
-[eye_tracker_action_server-5] [INFO] [1782314314.805565342] [eye_tracker_action_server]: Eye Tracker Action Server started.
-[sm-8] [INFO] [1782314314.819321024] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314314.893654162] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314315.030248228] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314315.100914683] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[ros2-11] Transitioning successful
-[sm-8] [INFO] [1782314315.187404010] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314315.275643653] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314315.373391167] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[INFO] [ros2-11]: process has finished cleanly [pid 72552]
-[INFO] [ros2-12]: process started with pid [72588]
-[sm-8] [INFO] [1782314315.409774808] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314315.421023258] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [INFO] [1782314315.540583788] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314315.577173931] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[transcribe_microphone_server-6] [INFO] [1782314315.674529311] [whisper_mic_server]: Speech Action server transcribe_speech started
-[sm-8] [INFO] [1782314315.692592546] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314315.720059735] [hri]: [ros_clients_cache.py:get_or_create_service_client:142] Reusing existing service client for '/yolo/detect3d' of type 'lasr_vision_interfaces.srv._yolo_detection3_d.YoloDetection3D'
-[sm-8] [WARN] [1782314315.789419706] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[ros2-12] Transitioning successful
-[INFO] [ros2-12]: process has finished cleanly [pid 72588]
-[sm-8] [INFO] [1782314316.732984410] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314316.791569918] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314316.835411656] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314316.872516687] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for 'transcribe_speech' of type 'lasr_speech_recognition_interfaces.action._transcribe_speech.TranscribeSpeech'
-[sm-8] [INFO] [1782314316.909737179] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314316.960697092] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314316.993323546] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314317.045342434] [hri]: [ros_clients_cache.py:get_or_create_service_client:148] Creating new service client for '/yolo/detect3d_pose' of type 'lasr_vision_interfaces.srv._yolo_pose_detection3_d.YoloPoseDetection3D'
-[sm-8] [INFO] [1782314317.135384655] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314317.167051102] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314317.177680167] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314317.206832428] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314317.238166084] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [WARN] [1782314317.263141822] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
-[sm-8] [INFO] [1782314318.300193446] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/head_controller/point_head_action' of type 'control_msgs.action._point_head.PointHead'
-[sm-8] [INFO] [1782314318.321151616] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314318.375995993] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314318.426407384] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314318.473129054] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314318.497269860] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/play_motion2' of type 'play_motion2_msgs.action._play_motion2.PlayMotion2'
-[sm-8] [INFO] [1782314318.519031971] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314318.530551311] [hri]: [ros_clients_cache.py:get_or_create_action_client:93] Reusing existing action client for '/tts_engine/tts' of type 'tts_msgs.action._tts.TTS'
-[sm-8] [INFO] [1782314318.600644328] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'WAIT_START'
-[sm-8] [INFO] [1782314341.177405082] [hri]: [monitor_state.py:execute:166] Processing msg from topic '/hri/start'
-[sm-8] [INFO] [1782314341.178012858] [hri]: [state_machine.py:wait_cb:31] RECEIVED START SIGNAL
-[sm-8] [INFO] [1782314341.178356528] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT_START' : 'succeeded' --> 'START_TIMER'
-[sm-8] [INFO] [1782314341.178895979] [hri]: [timer_states.py:execute:19] Timer started at: 1782314341.1784122
-[sm-8] [INFO] [1782314341.179222070] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'START_TIMER' : 'succeeded' --> 'START_CON'
-[sm-8] [INFO] [1782314341.180301827] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_DOOR_OPENING'
-[sm-8] [INFO] [1782314341.180461719] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314341.181998932] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314341.182236512] [hri]: [detect_door_opening.py:execute:99] Waiting for door to open...
-[sm-8] [INFO] [1782314345.936369233] [hri]: [detect_door_opening.py:_is_door_opened:71] Door has been opened.
-[sm-8] [INFO] [1782314346.374708414] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_DOOR_OPENING' : 'door_opened' --> 'GO_TO_START'
-[sm-8] [INFO] [1782314346.375156599] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'PRE_NAV'
-[sm-8] [INFO] [1782314346.375474830] [hri]: GIVING GOAL of pre_navigation
-[sm-8] [INFO] [1782314346.375849338] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314346.376697756] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314349.071027065] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314349.073517597] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PRE_NAV' : 'succeeded' --> 'GO_TO_START_POSE'
-[sm-8] [INFO] [1782314349.094194893] [hri]: Navigating to goal: 2.620011965794007 0.4284228083916832...
-[sm-8] [INFO] [1782314371.229517845] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_START_POSE' : 'succeeded' --> 'POST_NAV'
-[sm-8] [INFO] [1782314371.231069318] [hri]: GIVING GOAL of post_navigation
-[sm-8] [INFO] [1782314371.231369178] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314371.232202193] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314374.053640279] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314374.054045356] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'POST_NAV' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314374.054331042] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314374.054595317] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_START' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314374.054851807] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314374.055466836] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'START_CON' : 'succeeded' --> 'GO_TO_DOOR'
-[sm-8] [INFO] [1782314374.055741022] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'PRE_NAV'
-[sm-8] [INFO] [1782314374.056084963] [hri]: GIVING GOAL of pre_navigation
-[sm-8] [INFO] [1782314374.056445324] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314374.057313199] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314376.884713980] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314376.885016752] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PRE_NAV' : 'succeeded' --> 'GO_TO_DOOR_POSE'
-[sm-8] [INFO] [1782314376.885819207] [hri]: Navigating to goal: 0.9737232865224763 0.6644210227864706...
-[sm-8] [INFO] [1782314382.410154416] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_DOOR_POSE' : 'succeeded' --> 'POST_NAV'
-[sm-8] [INFO] [1782314382.411336708] [hri]: GIVING GOAL of post_navigation
-[sm-8] [INFO] [1782314382.412928754] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314382.413815205] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314385.115156399] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314385.115512170] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'POST_NAV' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314385.115776510] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314385.116073480] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_DOOR' : 'succeeded' --> 'GREET'
-[sm-8] [INFO] [1782314385.116429422] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'SAY_WAITING_FOR_GUEST'
-[sm-8] [INFO] [1782314385.116887266] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314385.117813277] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314387.214955934] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_WAITING_FOR_GUEST' : 'succeeded' --> 'WAIT_FOR_GUEST'
-[sm-8] [INFO] [1782314387.215261097] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314387.215497497] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314387.481121715] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314387.492656197] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314388.404141494] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314388.404500072] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314388.441243581] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314388.442303110] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314388.442581639] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314388.442949461] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314388.443202009] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314388.696856693] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314388.697552816] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314388.769137528] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314388.770001938] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314388.809185211] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314388.809520923] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314388.809792411] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314388.810158860] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314388.810421653] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314389.065612182] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314389.067701764] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314389.101892738] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314389.102243372] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314389.143842899] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314389.144222615] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314389.144537512] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314389.144987601] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314389.145276288] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314389.406128043] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314389.406898705] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314389.432076058] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314389.432412444] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314389.471573805] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314389.473443631] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314389.473753268] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314389.474192151] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314389.474476349] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314389.730354678] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314389.733411805] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314389.764435325] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314389.765087627] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314389.790952658] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314389.794920182] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314389.809999801] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314389.810525779] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314389.810891384] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314390.061767796] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314390.062582008] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314390.095773884] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314390.096164574] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314390.130750827] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314390.134391345] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314390.134659730] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314390.135112807] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314390.135370208] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314390.395560938] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314390.396320349] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314390.432387739] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314390.432754116] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314390.469541353] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314390.474268799] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314390.475301637] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314390.475650884] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314390.475902192] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314390.753590549] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314390.765846112] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314390.799425332] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314390.801331807] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314390.838191447] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314390.838573013] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314390.838890038] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314390.839420731] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314390.839677163] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314391.101328323] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314391.102217791] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314391.135441495] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314391.135804467] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314391.168479386] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314391.168975365] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314391.169420881] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314391.169880190] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314391.170281884] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314391.435896074] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314391.436542227] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314391.467184294] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314391.468308500] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314391.505172037] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314391.505621046] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314391.506023531] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314391.506525163] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314391.506875537] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314391.759833006] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314391.760457843] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314391.803867714] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314391.804296958] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314391.831152661] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314391.831447727] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314391.831718711] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314391.832137140] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314391.832403299] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314392.097506256] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314392.098391084] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314392.127338619] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314392.128051200] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314392.165511112] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314392.165833789] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314392.166107702] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314392.166471335] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314392.166719515] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314392.435643960] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314392.457604136] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314392.494261110] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314392.494583226] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314392.534551601] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314392.534991498] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314392.535315958] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314392.535746768] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314392.536073604] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314392.790614354] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314392.791447815] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314392.826836737] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314392.827177498] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314392.862636627] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314392.862999706] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314392.866342234] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314392.867098210] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314392.867380380] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314393.124104600] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314393.124745051] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314393.163105185] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314393.163564720] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314393.196416615] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314393.196812940] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314393.199780047] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314393.202339276] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314393.202658139] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314393.457341289] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314393.461935596] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314393.493984667] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314393.494305232] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314393.534155217] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314393.536632237] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314393.537901867] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314393.538348849] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314393.538621202] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314393.799331432] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314393.803237132] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314393.834829698] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314393.835243718] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314393.868441653] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314393.868812330] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314393.869112543] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314393.869507536] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314393.869799245] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314394.129106046] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314394.129920947] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314394.157649555] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314394.158074523] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314394.202294927] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314394.202647057] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314394.202956352] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314394.203343411] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314394.203614986] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314394.456633660] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314394.457411548] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314394.491890436] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314394.492238703] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314394.523995433] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314394.524358456] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314394.524638118] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314394.525065052] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314394.525309627] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314394.787270368] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314394.795271079] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314394.825193953] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314394.825595722] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314394.860356606] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314394.860669495] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314394.860948368] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314394.861312069] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314394.861535420] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314395.123168041] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314395.124357188] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314395.158100459] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314395.158456354] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314395.194309804] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314395.199204488] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314395.222080371] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314395.223514930] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314395.223895259] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314395.487140148] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314395.487876553] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314395.523444756] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314395.524099976] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314395.566004826] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314395.566356228] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314395.566606716] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314395.567048297] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314395.567299479] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314395.822974496] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314395.823661200] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314395.954592607] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314395.954947882] [hri]: [detect_3d.py:response_handler:121] person at (-0.35, 0.52, 1.20)
-[sm-8] [INFO] [1782314395.955269203] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314395.983420852] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.34512436138449376, y:0.5201997670753591, z:1.1993635525482622
-[sm-8] [INFO] [1782314395.994148630] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314395.994589248] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314395.995016593] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314395.995508850] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314395.995928978] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314396.253256794] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314396.254098705] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314396.292513132] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314396.292835685] [hri]: [detect_3d.py:response_handler:121] person at (-0.12, 0.76, 1.21)
-[sm-8] [INFO] [1782314396.293227836] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314396.327675959] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.12336103453084213, y:0.7615448795529552, z:1.2085109431381835
-[sm-8] [INFO] [1782314396.328378247] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314396.328725674] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314396.329058919] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314396.329555530] [hri]: [wait_for_person_in_area.py:execute:22] Found 1 people in wait area.
-[sm-8] [INFO] [1782314396.329866765] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'done' --> 'succeeded'
-[sm-8] [INFO] [1782314396.330155303] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314396.330380833] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT_FOR_GUEST' : 'succeeded' --> 'GET_PERSON_POINT'
-[sm-8] [INFO] [1782314396.335300661] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_PERSON_POINT' : 'succeeded' --> 'LOOK_AND_GREET'
-[sm-8] [INFO] [1782314396.361794646] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'GREET_AND_ASK_GUEST'
-[sm-8] [INFO] [1782314396.362022380] [hri]: [action_state.py:execute:165] Waiting for action '/lasr_vision_eye_tracker/track_eyes'
-[sm-8] [INFO] [1782314396.363300099] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'SAY'
-[sm-8] [INFO] [1782314396.363617137] [hri]: [action_state.py:execute:189] Sending goal to action '/lasr_vision_eye_tracker/track_eyes'
-[sm-8] [INFO] [1782314396.364016750] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314396.364884061] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[eye_tracker_action_server-5] [INFO] [1782314396.365155360] [eye_tracker_action_server]: Received eye tracker goal
-[eye_tracker_action_server-5] [INFO] [1782314396.366320832] [eye_tracker_action_server]: Beginning eye tracking...
-[sm-8] [INFO] [1782314402.556218583] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY' : 'succeeded' --> 'LISTEN'
-[sm-8] [INFO] [1782314402.556642323] [hri]: [action_state.py:execute:165] Waiting for action 'transcribe_speech'
-[sm-8] [INFO] [1782314402.557715755] [hri]: [action_state.py:execute:189] Sending goal to action 'transcribe_speech'
-[transcribe_microphone_server-6] [INFO] [1782314402.559651478] [whisper_mic_server]: Request Received
-[transcribe_microphone_server-6] [INFO] [1782314408.939430643] [whisper_mic_server]: Transcribing phrase with Whisper...
-[transcribe_microphone_server-6] [INFO] [1782314409.799771966] [whisper_mic_server]: Transcription finished!
-[transcribe_microphone_server-6] [INFO] [1782314409.800055898] [whisper_mic_server]: Time taken: 0.86s
-[transcribe_microphone_server-6] [INFO] [1782314409.800382678] [whisper_mic_server]: Transcribed phrase: Hi Tiago, my name is Jeff. My favourite drink is vodka.
-[transcribe_microphone_server-6] [INFO] [1782314409.800634678] [whisper_mic_server]: transcribe_speech has succeeded
-[sm-8] [INFO] [1782314409.817050109] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LISTEN' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314409.817410032] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314409.817731117] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GREET_AND_ASK_GUEST' : 'succeeded' --> 'GET_NAME_DRINK_FACE'
-[sm-8] [INFO] [1782314409.820987916] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'PARSE_NAME'
-[sm-8] [INFO] [1782314409.821051912] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'INITIALISE_DETECTION_FLAG'
-[sm-8] [INFO] [1782314409.821736466] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_3D'
-[sm-8] [INFO] [1782314409.822417239] [hri]: [service_state.py:execute:138] Waiting for service '/hri_task/query_llm'
-[sm-8] [INFO] [1782314409.822988475] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'INITIALISE_DETECTION_FLAG' : 'succeeded' --> 'GET_GUEST_ATTRIBUTES'
-[sm-8] [INFO] [1782314409.853873962] [hri]: [service_state.py:execute:153] Sending request to service '/hri_task/query_llm'
-[sm-8] [INFO] [1782314409.854596042] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'GET_IMAGE'
-[hri_task_service-7] [INFO] [1782314409.854722834] [llm]: Received query: Hi Tiago, my name is Jeff. My favourite drink is vodka., and task is name
-[sm-8] [INFO] [1782314409.855587765] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_IMAGE' : 'succeeded' --> 'GET_ATTRIBUTES'
-[sm-8] [INFO] [1782314409.886556333] [hri]: [service_state.py:execute:138] Waiting for service '/vlm/describe_people'
-[sm-8] [INFO] [1782314409.888040784] [hri]: [service_state.py:execute:153] Sending request to service '/vlm/describe_people'
-[vlm_service-4] [INFO] [1782314409.894790038] [lasr_vlm_service]: Received request to describe person
-[sm-8] [INFO] [1782314410.111717291] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314410.112703960] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314410.182934604] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314410.183579032] [hri]: [detect_3d.py:response_handler:121] person at (-0.04, 1.01, 1.43)
-[sm-8] [INFO] [1782314410.184122963] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314410.184748034] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314410.185582207] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314410.250235537] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314410.252828186] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314410.254875146] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 114897 / 921600
-[sm-8] [INFO] [1782314410.291338968] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314410.315459902] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314410.316396694] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] 2026-06-24 16:20:10.327360: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.333350: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.336871: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.339977: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.345465: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.349577: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.354787: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.361329: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
-[service-3] 2026-06-24 16:20:10.363720: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1928] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 1568 MB memory: -> device: 0, name: NVIDIA RTX A2000 8GB Laptop GPU, pci bus id: 0000:01:00.0, compute capability: 8.6
-[vlm_service-4] [INFO] [1782314424.869386219] [lasr_vlm_service]: VLM result: {'hair_color': ['black'], 'hair_length': ['shoulderlength'], 'glasses': [True], 'hat': [True], 'shirt color': ['black']}
-[sm-8] [INFO] [1782314424.895810641] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_ATTRIBUTES' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314424.897098254] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314424.897450820] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_GUEST_ATTRIBUTES' : 'succeeded' --> 'HANDLE_GUEST_ATTRIBUTES'
-[sm-8] [INFO] [1782314424.898047871] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'HANDLE_GUEST_ATTRIBUTES' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314424.925036438] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[service-3] 2026-06-24 16:20:26.600316: I external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:465] Loaded cuDNN version 8907
-[service-3] 2026-06-24 16:20:29.098072: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 4.12GiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[service-3] 2026-06-24 16:20:29.154755: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.07GiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[service-3] [INFO] [1782314430.683487676] [lasr_vision_reid]: Added face embedding for guest1, total samples: 1
-[sm-8] [INFO] [1782314430.689488888] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314430.690398226] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 1/10.
-[sm-8] [INFO] [1782314430.690869754] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314430.954923545] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314430.956116573] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314431.016539637] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314431.016984042] [hri]: [detect_3d.py:response_handler:121] person at (-0.12, 1.06, 1.40)
-[sm-8] [INFO] [1782314431.017413776] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314431.017940335] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314431.033676593] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314431.087479329] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314431.088555630] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314431.112900098] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 103509 / 921600
-[sm-8] [INFO] [1782314431.114901407] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314431.115780944] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314431.116512538] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314431.301554918] [lasr_vision_reid]: Added face embedding for guest1, total samples: 2
-[sm-8] [INFO] [1782314431.316290370] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314431.317168728] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 2/10.
-[sm-8] [INFO] [1782314431.317679851] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314431.584985311] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314431.585745892] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314431.651792958] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314431.652307634] [hri]: [detect_3d.py:response_handler:121] person at (-0.14, 1.07, 1.40)
-[sm-8] [INFO] [1782314431.652790786] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314431.653395125] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314431.654165168] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314431.715124523] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314431.716240963] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314431.721641080] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 102024 / 921600
-[sm-8] [INFO] [1782314431.722835136] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314431.723700100] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314431.768199129] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314431.951383581] [lasr_vision_reid]: Added face embedding for guest1, total samples: 3
-[sm-8] [INFO] [1782314431.956249868] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314431.987987226] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 3/10.
-[sm-8] [INFO] [1782314431.989595156] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314432.247945177] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314432.248705623] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314432.309980664] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314432.310433469] [hri]: [detect_3d.py:response_handler:121] person at (-0.14, 1.07, 1.39)
-[sm-8] [INFO] [1782314432.310857930] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314432.311367499] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314432.312085254] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314432.375980318] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314432.377472665] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314432.379412658] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 104388 / 921600
-[sm-8] [INFO] [1782314432.380296784] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314432.380975504] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314432.381656404] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314432.563331240] [lasr_vision_reid]: Added face embedding for guest1, total samples: 4
-[sm-8] [INFO] [1782314432.585852693] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314432.586584392] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 4/10.
-[sm-8] [INFO] [1782314432.586941679] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314432.844371459] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314432.845215437] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314432.910263242] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314432.910702734] [hri]: [detect_3d.py:response_handler:121] person at (-0.13, 1.06, 1.38)
-[sm-8] [INFO] [1782314432.911832306] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314432.912326997] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314432.914355817] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314432.952128963] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314432.953006411] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314432.977072357] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 105897 / 921600
-[sm-8] [INFO] [1782314432.978308366] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314432.979148786] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314432.979975772] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314433.163809685] [lasr_vision_reid]: Added face embedding for guest1, total samples: 5
-[sm-8] [INFO] [1782314433.198105072] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314433.213541369] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 5/10.
-[sm-8] [INFO] [1782314433.213947331] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314433.509554507] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314433.510903096] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314433.577873231] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314433.578403052] [hri]: [detect_3d.py:response_handler:121] person at (-0.13, 1.07, 1.38)
-[sm-8] [INFO] [1782314433.578838308] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314433.579361046] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314433.580086944] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314433.619500257] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314433.643210846] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314433.645301944] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 107139 / 921600
-[sm-8] [INFO] [1782314433.646560980] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314433.647535928] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314433.648381873] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314433.835112025] [lasr_vision_reid]: Added face embedding for guest1, total samples: 6
-[sm-8] [INFO] [1782314433.847967004] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314433.851558013] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 6/10.
-[sm-8] [INFO] [1782314433.852300784] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314434.108419854] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314434.110877850] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314434.174764059] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314434.175471336] [hri]: [detect_3d.py:response_handler:121] person at (-0.13, 1.07, 1.38)
-[sm-8] [INFO] [1782314434.175996036] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314434.176492452] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314434.180430591] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314434.241703265] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314434.242753470] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314434.244813361] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 106155 / 921600
-[sm-8] [INFO] [1782314434.245845235] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314434.246623968] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314434.247424520] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314434.430963287] [lasr_vision_reid]: Added face embedding for guest1, total samples: 7
-[sm-8] [INFO] [1782314434.449956815] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314434.451001680] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 7/10.
-[sm-8] [INFO] [1782314434.451481663] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314434.708120590] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314434.709094186] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314434.774433658] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314434.775065205] [hri]: [detect_3d.py:response_handler:121] person at (-0.13, 1.06, 1.38)
-[sm-8] [INFO] [1782314434.775633103] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314434.776321337] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314434.777224456] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314434.814401882] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314434.815313070] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314434.816793539] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 106908 / 921600
-[sm-8] [INFO] [1782314434.817686691] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314434.818410062] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314434.840564297] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314435.025327657] [lasr_vision_reid]: Added face embedding for guest1, total samples: 8
-[sm-8] [INFO] [1782314435.072071154] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314435.077576310] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 8/10.
-[sm-8] [INFO] [1782314435.078144838] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314435.347625925] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314435.348496820] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314435.377674005] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314435.378102362] [hri]: [detect_3d.py:response_handler:121] person at (-0.13, 1.05, 1.38)
-[sm-8] [INFO] [1782314435.378530754] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314435.379079896] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314435.379864908] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314435.438940027] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314435.440503457] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314435.442202376] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 108201 / 921600
-[sm-8] [INFO] [1782314435.443154567] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314435.443907042] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314435.444622812] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314435.623515888] [lasr_vision_reid]: Added face embedding for guest1, total samples: 9
-[sm-8] [INFO] [1782314435.647110275] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314435.648006061] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 9/10.
-[sm-8] [INFO] [1782314435.648461847] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314435.906494421] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314435.907823671] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314435.948677703] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314435.949107579] [hri]: [detect_3d.py:response_handler:121] person at (-0.11, 1.05, 1.38)
-[sm-8] [INFO] [1782314435.949510607] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314435.950023399] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314435.972291886] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314436.044079604] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314436.045224389] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314436.047141138] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 110460 / 921600
-[sm-8] [INFO] [1782314436.048060008] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314436.048768283] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314436.049477839] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314436.230825321] [lasr_vision_reid]: Added face embedding for guest1, total samples: 10
-[sm-8] [INFO] [1782314436.246568633] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [INFO] [1782314436.248236470] [hri]: [hri_learn_faces.py:execute:116] Collected enough images for the guest.
-[sm-8] [INFO] [1782314436.248697476] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314436.249137260] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[hri_task_service-7] [INFO] [1782314438.041799527] [llm]: LLM output: Name: Jeff
-[hri_task_service-7] [INFO] [1782314438.042272487] [llm]: Returning response: lasr_llm_interfaces.msg.ReceptionistResponse(name='Jeff', favourite_drink='', interests='', interest_commonality='', llm_response='Name: Jeff')
-[sm-8] [INFO] [1782314438.073463862] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PARSE_NAME' : 'succeeded' --> 'PARSE_DRINK'
-[sm-8] [INFO] [1782314438.074117025] [hri]: [service_state.py:execute:138] Waiting for service '/hri_task/query_llm'
-[sm-8] [INFO] [1782314438.074875715] [hri]: [service_state.py:execute:153] Sending request to service '/hri_task/query_llm'
-[hri_task_service-7] [INFO] [1782314438.075535530] [llm]: Received query: Hi Tiago, my name is Jeff. My favourite drink is vodka., and task is drink
-[hri_task_service-7] [INFO] [1782314438.587218621] [llm]: LLM output: Favourite drink: vodka
-[hri_task_service-7] [INFO] [1782314438.587533297] [llm]: Returning response: lasr_llm_interfaces.msg.ReceptionistResponse(name='', favourite_drink='vodka', interests='', interest_commonality='', llm_response='Favourite drink: vodka')
-[sm-8] [INFO] [1782314438.609464197] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PARSE_DRINK' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314438.610500665] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314438.611033850] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_NAME_DRINK_FACE' : 'succeeded' --> 'SAY_WELCOME'
-[sm-8] [INFO] [1782314438.611722201] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314438.635061371] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314443.897263113] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_WELCOME' : 'succeeded' --> 'STOP_EYE_TRACKING_1'
-[sm-8] [INFO] [1782314443.897728177] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'STOP_EYE_TRACKING_1' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314443.898055222] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314444.180554694] [hri]: [eye_tracker.py:handle_feedback:24] Cancelling current eye tracker
-[eye_tracker_action_server-5] [INFO] [1782314444.186564303] [eye_tracker_action_server]: Eye Tracker Action Server cancellation requested
-[sm-8] [INFO] [1782314444.194460561] [hri]: [state.hpp:cancel_state:173] Canceling state 'StartEyeTracker'
-[sm-8] [INFO] [1782314444.429422889] [hri]: [eye_tracker.py:handle_feedback:24] Cancelling current eye tracker
-[sm-8] [INFO] [1782314444.432461323] [hri]: [state.hpp:cancel_state:173] Canceling state 'StartEyeTracker'
-[eye_tracker_action_server-5] [INFO] [1782314444.903215497] [eye_tracker_action_server]: Eye Tracker Action Server canceled, stopping tracking.
-[eye_tracker_action_server-5] [INFO] [1782314445.408029528] [eye_tracker_action_server]: Canceled EYE TRACKER
-[sm-8] [INFO] [1782314445.445390963] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AND_GREET' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314445.445704834] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314445.445986830] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GREET' : 'succeeded' --> 'GUIDE_TO_SEAT'
-[sm-8] [INFO] [1782314445.446270434] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'PRE_NAV'
-[sm-8] [INFO] [1782314445.446540815] [hri]: GIVING GOAL of pre_navigation
-[sm-8] [INFO] [1782314445.446896671] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314445.447816922] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314448.209816231] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314448.210119608] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PRE_NAV' : 'succeeded' --> 'GO_TO_SEAT_POSE'
-[sm-8] [INFO] [1782314448.211101356] [hri]: Navigating to goal: 0.9241805428867255 -0.37066992922907555...
-[sm-8] [INFO] [1782314496.803613492] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_SEAT_POSE' : 'succeeded' --> 'POST_NAV'
-[sm-8] [INFO] [1782314496.805730947] [hri]: GIVING GOAL of post_navigation
-[sm-8] [INFO] [1782314496.806072498] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314496.806925397] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314499.565752034] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314499.566151292] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'POST_NAV' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314499.566448814] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314499.566735715] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GUIDE_TO_SEAT' : 'succeeded' --> 'SEAT_GUEST'
-[sm-8] [INFO] [1782314499.567105141] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'SAY_FINDING_SEAT'
-[sm-8] [INFO] [1782314499.567565610] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314499.569721504] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314501.965598401] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_FINDING_SEAT' : 'succeeded' --> 'RESET_HEAD_1'
-[sm-8] [INFO] [1782314501.965897162] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314501.966274524] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314501.967342144] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314503.492120997] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314503.492427068] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_1' : 'succeeded' --> 'DETECT_ALL_PEOPLE_SEATS'
-[sm-8] [INFO] [1782314503.492694850] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'INIT_BLACKBOARD'
-[sm-8] [INFO] [1782314503.493023355] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'INIT_BLACKBOARD' : 'succeeded' --> 'CALCULATE_SWEEP_POINTS'
-[sm-8] [INFO] [1782314503.493356200] [hri]: [detect_all_in_polygon.py:_calculate_sweep_points:300] Waiting for camera info and TF to map frame...
-[sm-8] [INFO] [1782314503.537370375] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 1.57%, score: 0.04
-[sm-8] [INFO] [1782314503.551226771] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 3.10%, score: 0.04
-[sm-8] [INFO] [1782314503.565932856] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 4.62%, score: 0.04
-[sm-8] [INFO] [1782314503.567354881] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 6.03%, score: 0.03
-[sm-8] [INFO] [1782314503.570110312] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 7.44%, score: 0.03
-[sm-8] [INFO] [1782314503.571248886] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 8.81%, score: 0.03
-[sm-8] [INFO] [1782314503.589883432] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 10.09%, score: 0.03
-[sm-8] [INFO] [1782314503.590816717] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 11.32%, score: 0.03
-[sm-8] [INFO] [1782314503.591353121] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 12.26%, score: 0.02
-[sm-8] [INFO] [1782314503.591775561] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 13.07%, score: 0.02
-[sm-8] [INFO] [1782314503.632196966] [hri]: [detect_all_in_polygon.py:_calculate_sweep_points:349] Calculated 10 sweep points.
-[sm-8] [INFO] [1782314503.632667126] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CALCULATE_SWEEP_POINTS' : 'succeeded' --> 'LOOK_AND_DETECT'
-[sm-8] [INFO] [1782314503.633054050] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314503.633531392] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 0
-[sm-8] [INFO] [1782314503.633906069] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314503.634471773] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.170, -2.091, 0.700)
-[sm-8] [INFO] [1782314503.634793972] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314503.636097897] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314504.691562179] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'succeeded' --> 'SLEEP'
-[sm-8] [INFO] [1782314504.692084372] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314506.694211597] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314506.694485807] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314506.950927550] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314506.951760181] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314507.017338319] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314507.017677691] [hri]: [detect_3d.py:response_handler:121] chair at (-0.25, -1.65, 0.49)
-[sm-8] [INFO] [1782314507.018038905] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.59, 0.62)
-[sm-8] [INFO] [1782314507.018329347] [hri]: [detect_3d.py:response_handler:121] chair at (-0.01, -2.67, 0.47)
-[sm-8] [INFO] [1782314507.018629511] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314507.054929653] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.25209418205868694, y:-1.6531467610787582, z:0.4872168065776056
-[sm-8] [INFO] [1782314507.055381248] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5385083821161619, y:-2.5922757041932405, z:0.6247916595294938
-[sm-8] [INFO] [1782314507.055790584] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.014379232045992452, y:-2.67464577225065, z:0.46622707207590297
-[sm-8] [INFO] [1782314507.056364199] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314507.056618237] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314507.056893047] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314507.057459902] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314507.057657552] [hri]: Detected objects:
-[sm-8] [INFO] [1782314507.057919271] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314507.058135067] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314507.058327076] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314507.058638722] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314507.059104702] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 1
-[sm-8] [INFO] [1782314507.059501593] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314507.060047005] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(-0.017, -2.284, 0.700)
-[sm-8] [INFO] [1782314507.060381551] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314507.061268253] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [WARN] [1782314512.095119305] [hri]: [action_state.py:execute:205] Timeout reached while waiting for response from action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314512.107286370] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'timeout' --> 'SLEEP'
-[sm-8] [INFO] [1782314512.110512049] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314514.113052574] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314514.113482681] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314514.381820778] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314514.382740528] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314514.439888316] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314514.440729356] [hri]: [detect_3d.py:response_handler:121] chair at (-0.31, -1.61, 0.50)
-[sm-8] [INFO] [1782314514.441117763] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.62, 0.61)
-[sm-8] [INFO] [1782314514.441449413] [hri]: [detect_3d.py:response_handler:121] chair at (-0.03, -2.73, 0.46)
-[sm-8] [INFO] [1782314514.441823505] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314514.476613807] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.3056239218455188, y:-1.6119756072163294, z:0.5037601247251005
-[sm-8] [INFO] [1782314514.477107952] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5422432904088664, y:-2.6231152700597695, z:0.6129247652003355
-[sm-8] [INFO] [1782314514.477506736] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.030954601232241585, y:-2.7291086666301396, z:0.4611574059305624
-[sm-8] [INFO] [1782314514.485594629] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314514.485913033] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314514.486207079] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314514.486670173] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314514.486948921] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314514.487231320] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314514.487542808] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314514.487776327] [hri]: Detected objects:
-[sm-8] [INFO] [1782314514.496584098] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314514.504779583] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314514.505994713] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314514.506319521] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314514.506777202] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 2
-[sm-8] [INFO] [1782314514.507136718] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314514.507608032] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.085, -1.826, 0.700)
-[sm-8] [INFO] [1782314514.507977149] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314514.510034474] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314514.514771109] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314514.515224047] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314516.518277299] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314516.540360648] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314516.813756176] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314516.814653694] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314516.872012584] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314516.874272513] [hri]: [detect_3d.py:response_handler:121] chair at (-0.30, -1.61, 0.50)
-[sm-8] [INFO] [1782314516.874551880] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.61, 0.62)
-[sm-8] [INFO] [1782314516.874821440] [hri]: [detect_3d.py:response_handler:121] chair at (-0.04, -2.73, 0.45)
-[sm-8] [INFO] [1782314516.875098977] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314516.907819456] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.3047551475442867, y:-1.6084712450714096, z:0.5002625631274525
-[sm-8] [INFO] [1782314516.908296940] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5415599037215428, y:-2.6086463838081784, z:0.6204043280578496
-[sm-8] [INFO] [1782314516.908660150] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.0389145973488042, y:-2.7338368690143664, z:0.4532160217901322
-[sm-8] [INFO] [1782314516.909196136] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314516.909447364] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314516.909657870] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314516.910102019] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314516.910405207] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314516.910696710] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314516.911047868] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314516.911224298] [hri]: Detected objects:
-[sm-8] [INFO] [1782314516.911465064] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314516.911716531] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314516.911935192] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314516.912247307] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314516.912719705] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 3
-[sm-8] [INFO] [1782314516.913148271] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314516.913656873] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.443, -2.163, 0.700)
-[sm-8] [INFO] [1782314516.914008692] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314516.914930098] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [WARN] [1782314521.933182350] [hri]: [action_state.py:execute:205] Timeout reached while waiting for response from action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314521.934404603] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'timeout' --> 'SLEEP'
-[sm-8] [INFO] [1782314521.934752468] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314523.937086431] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314523.937409958] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314524.194281433] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314524.195224226] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314524.229137308] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314524.229995811] [hri]: [detect_3d.py:response_handler:121] person at (0.55, -2.55, 0.63)
-[sm-8] [INFO] [1782314524.230283883] [hri]: [detect_3d.py:response_handler:121] chair at (0.01, -2.58, 0.53)
-[sm-8] [INFO] [1782314524.230585757] [hri]: [detect_3d.py:response_handler:121] chair at (-0.08, -1.72, 0.47)
-[sm-8] [INFO] [1782314524.230923887] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314524.270848189] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5470645583161777, y:-2.5450350005980287, z:0.6303077921823138
-[sm-8] [INFO] [1782314524.271425829] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:0.009756133472979323, y:-2.5753124596863413, z:0.5340026670226391
-[sm-8] [INFO] [1782314524.271830783] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.08082877455466853, y:-1.7249992692420997, z:0.472650426604313
-[sm-8] [INFO] [1782314524.272574123] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314524.272896793] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314524.273160400] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314524.290124765] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314524.290471060] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314524.290737688] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314524.291046308] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314524.291231089] [hri]: Detected objects:
-[sm-8] [INFO] [1782314524.291461185] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314524.291665393] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314524.291865259] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314524.292166247] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314524.292560882] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 4
-[sm-8] [INFO] [1782314524.292895906] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314524.293330110] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.051, -2.757, 0.700)
-[sm-8] [INFO] [1782314524.293602060] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314524.294365284] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314524.299889311] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314524.300300104] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314526.321035180] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314526.322178713] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314526.586517250] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314526.589897817] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314526.625126191] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314526.625447976] [hri]: [detect_3d.py:response_handler:121] chair at (-0.16, -1.69, 0.47)
-[sm-8] [INFO] [1782314526.625735740] [hri]: [detect_3d.py:response_handler:121] chair at (-0.01, -2.65, 0.47)
-[sm-8] [INFO] [1782314526.626090444] [hri]: [detect_3d.py:response_handler:121] person at (0.52, -2.66, 0.63)
-[sm-8] [INFO] [1782314526.626456193] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314526.666684951] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.15514888051987796, y:-1.689654009286174, z:0.47398795183323017
-[sm-8] [INFO] [1782314526.669512890] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.0051828193436621595, y:-2.65142085618084, z:0.46778712366078223
-[sm-8] [INFO] [1782314526.686662590] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5246011835652983, y:-2.655417230014539, z:0.6287310880109291
-[sm-8] [INFO] [1782314526.687310132] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314526.689076281] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314526.689405346] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314526.689843895] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314526.690142790] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314526.690407885] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314526.690746270] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314526.690963949] [hri]: Detected objects:
-[sm-8] [INFO] [1782314526.691194271] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314526.691392929] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314526.691594709] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314526.691868269] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314526.692307223] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 5
-[sm-8] [INFO] [1782314526.692642906] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314526.693142662] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(-0.243, -2.485, 0.700)
-[sm-8] [INFO] [1782314526.693440658] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314526.694276041] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314526.702186481] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314526.702587869] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314528.710884290] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314528.715823960] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314528.984198977] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314528.985099363] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314529.021868314] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314529.022197961] [hri]: [detect_3d.py:response_handler:121] chair at (-0.30, -1.63, 0.49)
-[sm-8] [INFO] [1782314529.022468309] [hri]: [detect_3d.py:response_handler:121] person at (0.53, -2.66, 0.62)
-[sm-8] [INFO] [1782314529.022786551] [hri]: [detect_3d.py:response_handler:121] chair at (-0.04, -2.77, 0.42)
-[sm-8] [INFO] [1782314529.023118689] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314529.054482263] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.2990152029644403, y:-1.6282368703247216, z:0.49309862287237005
-[sm-8] [INFO] [1782314529.054965638] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5308949113886658, y:-2.6636714406060613, z:0.6163369804246929
-[sm-8] [INFO] [1782314529.055341463] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.044670673099659663, y:-2.7718244891759074, z:0.42222459057309814
-[sm-8] [INFO] [1782314529.055912122] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314529.056185706] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314529.056443197] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314529.056820730] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314529.057145858] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314529.057480129] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314529.065230645] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314529.080532408] [hri]: Detected objects:
-[sm-8] [INFO] [1782314529.084295429] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314529.085016579] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314529.085265065] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314529.085605971] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314529.086086325] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 6
-[sm-8] [INFO] [1782314529.086471699] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314529.087048423] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.464, -2.621, 0.700)
-[sm-8] [INFO] [1782314529.087333384] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314529.089836807] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314529.097489389] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314529.097885813] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314531.114763715] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314531.117456882] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314531.394433877] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314531.395608941] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314531.428526800] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314531.428902920] [hri]: [detect_3d.py:response_handler:121] person at (0.55, -2.61, 0.64)
-[sm-8] [INFO] [1782314531.445371443] [hri]: [detect_3d.py:response_handler:121] chair at (-0.03, -1.75, 0.48)
-[sm-8] [INFO] [1782314531.446263610] [hri]: [detect_3d.py:response_handler:121] chair at (0.02, -2.56, 0.49)
-[sm-8] [INFO] [1782314531.446585163] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314531.482240085] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5503916195981067, y:-2.6091213997288354, z:0.6354540756361748
-[sm-8] [INFO] [1782314531.482691572] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.033678736372550144, y:-1.7462530525428173, z:0.4847532310482078
-[sm-8] [INFO] [1782314531.483134586] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:0.01930195393220957, y:-2.5597499447913177, z:0.48768873698076043
-[sm-8] [INFO] [1782314531.483696711] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314531.483967150] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314531.484240376] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314531.484697418] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314531.484982283] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314531.485280152] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314531.485610560] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314531.485827627] [hri]: Detected objects:
-[sm-8] [INFO] [1782314531.486092380] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314531.486291640] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314531.486492331] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314531.486781298] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314531.487227261] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 7
-[sm-8] [INFO] [1782314531.487607061] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314531.488147247] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.584, -2.396, 0.700)
-[sm-8] [INFO] [1782314531.488480438] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314531.489586607] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314532.487017510] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'succeeded' --> 'SLEEP'
-[sm-8] [INFO] [1782314532.487459645] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314534.489379779] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314534.489826239] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314534.742024885] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314534.742717953] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314534.779052231] [hri]: [detect_3d.py:response_handler:119] Got 4 detections
-[sm-8] [INFO] [1782314534.779363146] [hri]: [detect_3d.py:response_handler:121] person at (0.56, -2.57, 0.64)
-[sm-8] [INFO] [1782314534.779632132] [hri]: [detect_3d.py:response_handler:121] chair at (0.01, -2.53, 0.49)
-[sm-8] [INFO] [1782314534.779926717] [hri]: [detect_3d.py:response_handler:121] chair at (-0.03, -1.79, 0.47)
-[sm-8] [INFO] [1782314534.780205707] [hri]: [detect_3d.py:response_handler:121] chair at (2.00, -3.62, 0.45)
-[sm-8] [INFO] [1782314534.780501387] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314534.812098252] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5555911074722822, y:-2.565772882402859, z:0.6365989463993885
-[sm-8] [INFO] [1782314534.812538600] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:0.010655570983387985, y:-2.5299737879158033, z:0.490211669505762
-[sm-8] [INFO] [1782314534.812898431] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.02835617091186693, y:-1.7898496307289609, z:0.4671796515722655
-[sm-8] [INFO] [1782314534.813243457] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:1.9954101701315063, y:-3.6212017095608364, z:0.4483863752294778
-[sm-8] [INFO] [1782314534.813753727] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314534.813973768] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314534.814191763] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314534.814577102] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314534.814820448] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314534.815081498] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314534.815368807] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314534.815544596] [hri]: Detected objects:
-[sm-8] [INFO] [1782314534.815768134] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314534.815970301] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314534.816176131] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314534.816421637] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314534.816843319] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 8
-[sm-8] [INFO] [1782314534.817182186] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314534.817605234] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.920, -1.718, 0.700)
-[sm-8] [INFO] [1782314534.817920927] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314534.839766010] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314535.912010666] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'succeeded' --> 'SLEEP'
-[sm-8] [INFO] [1782314535.912366423] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314537.914204544] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314537.914562805] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314538.168757229] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314538.169527127] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314538.206692434] [hri]: [detect_3d.py:response_handler:119] Got 4 detections
-[sm-8] [INFO] [1782314538.207071760] [hri]: [detect_3d.py:response_handler:121] person at (0.55, -2.45, 0.68)
-[sm-8] [INFO] [1782314538.207506391] [hri]: [detect_3d.py:response_handler:121] chair at (0.17, -2.54, 0.49)
-[sm-8] [INFO] [1782314538.207872186] [hri]: [detect_3d.py:response_handler:121] chair at (1.95, -3.46, 0.43)
-[sm-8] [INFO] [1782314538.208183711] [hri]: [detect_3d.py:response_handler:121] person at (1.99, -2.55, 0.68)
-[sm-8] [INFO] [1782314538.208466390] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314538.243511095] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.547258531965884, y:-2.4519040156385152, z:0.6834171091536979
-[sm-8] [INFO] [1782314538.243985392] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:0.16837243964019266, y:-2.540950009116014, z:0.4865445903414336
-[sm-8] [INFO] [1782314538.244396602] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:1.9530945734135345, y:-3.463180824116707, z:0.4348811665503526
-[sm-8] [INFO] [1782314538.244872677] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:1.9878669075508482, y:-2.549264857168186, z:0.682310483527154
-[sm-8] [INFO] [1782314538.245488752] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314538.245762486] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314538.246066150] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314538.246478768] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314538.246739450] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314538.247111894] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314538.247351485] [hri]: Detected objects:
-[sm-8] [INFO] [1782314538.247630123] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314538.247819350] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314538.248078257] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314538.248384923] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314538.248865379] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 9
-[sm-8] [INFO] [1782314538.249279602] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314538.249797015] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.348, -2.912, 0.700)
-[sm-8] [INFO] [1782314538.250157183] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314538.250981480] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [WARN] [1782314543.265569240] [hri]: [action_state.py:execute:205] Timeout reached while waiting for response from action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314543.269736831] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'timeout' --> 'SLEEP'
-[sm-8] [INFO] [1782314543.270164292] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314545.272132475] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314545.272412654] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314545.526139562] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314545.526797201] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314545.564840987] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314545.565176034] [hri]: [detect_3d.py:response_handler:121] chair at (0.01, -2.57, 0.49)
-[sm-8] [INFO] [1782314545.565448123] [hri]: [detect_3d.py:response_handler:121] person at (0.53, -2.62, 0.63)
-[sm-8] [INFO] [1782314545.565732000] [hri]: [detect_3d.py:response_handler:121] chair at (-0.06, -1.74, 0.48)
-[sm-8] [INFO] [1782314545.566029098] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314545.602368852] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:0.009844900797363887, y:-2.5654199313133454, z:0.4887657968300644
-[sm-8] [INFO] [1782314545.602963828] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.5286957573586943, y:-2.6241653512518264, z:0.6283272278909247
-[sm-8] [INFO] [1782314545.603442174] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.05984870521414132, y:-1.7440766856481247, z:0.4842115150836901
-[sm-8] [INFO] [1782314545.604285248] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314545.604539353] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314545.604832377] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314545.605356614] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314545.605614146] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314545.605968677] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314545.606361587] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314545.606628326] [hri]: Detected objects:
-[sm-8] [INFO] [1782314545.606958348] [hri]: - chair at (-0.25209418205868694, -1.6531467610787582, 0.4872168065776056)
-[sm-8] [INFO] [1782314545.607203504] [hri]: - person at (0.5385083821161619, -2.5922757041932405, 0.6247916595294938)
-[sm-8] [INFO] [1782314545.607459597] [hri]: - chair at (-0.014379232045992452, -2.67464577225065, 0.46622707207590297)
-[sm-8] [INFO] [1782314545.615875714] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314545.632645091] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 10
-[sm-8] [INFO] [1782314545.634390192] [hri]: [detect_all_in_polygon.py:_get_look_point:454] Finished iterating through sweep points.
-[sm-8] [INFO] [1782314545.634667628] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314545.634945746] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314545.635203613] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AND_DETECT' : 'succeeded' --> 'PUBLISH_DETECTED_OBJECTS'
-[sm-8] [INFO] [1782314545.635632481] [hri]: Processing 3 detections for debug image.
-[sm-8] [INFO] [1782314545.638014472] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.638236204] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.640217848] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.640445363] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.640672309] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.640915541] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.641220656] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.651416347] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.659525640] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314545.659868446] [hri]: Created debug image with detections.
-[sm-8] [INFO] [1782314545.754054952] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PUBLISH_DETECTED_OBJECTS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314545.789040044] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314545.791809882] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_ALL_PEOPLE_SEATS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [WARN] [1782314545.792315035] [hri]: [seat_guest.py:execute:77] Finding seat in seat guest
-[sm-8] [INFO] [1782314545.792905191] [hri]: [seat_guest.py:execute:103] Detected this many people in sweep: 1
-[sm-8] [INFO] [1782314545.793247405] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'LOOK_HOST'
-[sm-8] [INFO] [1782314545.793663280] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.539, -2.592, 0.625)
-[sm-8] [INFO] [1782314545.793963350] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314545.794728010] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314546.837291345] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_HOST' : 'succeeded' --> 'SAY_HOST'
-[sm-8] [INFO] [1782314546.837800861] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314546.838850949] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314550.153423552] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_HOST' : 'succeeded' --> 'LEARN_HOST'
-[sm-8] [INFO] [1782314550.153719364] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_3D'
-[sm-8] [INFO] [1782314550.421515896] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314550.423024027] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314550.451329205] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314550.451782764] [hri]: [detect_3d.py:response_handler:121] person at (0.55, -2.55, 0.63)
-[sm-8] [INFO] [1782314550.452156380] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314550.452653893] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314550.453356369] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314550.486841775] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314550.487677511] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314550.489198077] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62679 / 921600
-[sm-8] [INFO] [1782314550.490617264] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314550.491106616] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314550.491765818] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314550.651441332] [lasr_vision_reid]: Added face embedding for host, total samples: 1
-[sm-8] [INFO] [1782314550.653536325] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314550.654034342] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 0/10.
-[sm-8] [INFO] [1782314550.654254630] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314550.919064285] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314550.919755277] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314550.950178233] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314550.950492874] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.55, 0.63)
-[sm-8] [INFO] [1782314550.950796318] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314550.951187246] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314550.951743465] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314550.984028566] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314550.984892119] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314550.987641358] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62976 / 921600
-[sm-8] [INFO] [1782314550.988521972] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314550.989217912] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314550.989964188] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314551.141644758] [lasr_vision_reid]: Added face embedding for host, total samples: 2
-[sm-8] [INFO] [1782314551.152948969] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314551.153465285] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 1/10.
-[sm-8] [INFO] [1782314551.153717730] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314551.416868574] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314551.417646655] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314551.453230846] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314551.453550336] [hri]: [detect_3d.py:response_handler:121] person at (0.55, -2.55, 0.63)
-[sm-8] [INFO] [1782314551.453853192] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314551.454305758] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314551.454972250] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314551.483497403] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314551.484222963] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314551.486503080] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62922 / 921600
-[sm-8] [INFO] [1782314551.487317831] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314551.487870635] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314551.488563131] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314551.634166268] [lasr_vision_reid]: Added face embedding for host, total samples: 3
-[sm-8] [INFO] [1782314551.648562517] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314551.649024216] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 2/10.
-[sm-8] [INFO] [1782314551.649229351] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314551.929184276] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314551.950094498] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314551.987489822] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314551.987813373] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.54, 0.64)
-[sm-8] [INFO] [1782314551.988168198] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314551.988587457] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314551.989374660] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314552.016498048] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314552.017429587] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314552.019069690] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62847 / 921600
-[sm-8] [INFO] [1782314552.019850586] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314552.020496676] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314552.021109536] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314552.170561781] [lasr_vision_reid]: Added face embedding for host, total samples: 4
-[sm-8] [INFO] [1782314552.181072132] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314552.181518484] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 3/10.
-[sm-8] [INFO] [1782314552.181739649] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314552.447537369] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314552.448414622] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314552.482722078] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314552.483091671] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.55, 0.64)
-[sm-8] [INFO] [1782314552.483481121] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314552.484098560] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314552.484754222] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314552.515544569] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314552.516314090] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314552.517562425] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 61404 / 921600
-[sm-8] [INFO] [1782314552.522691495] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314552.523424046] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314552.524156740] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314552.671667966] [lasr_vision_reid]: Added face embedding for host, total samples: 5
-[sm-8] [INFO] [1782314552.680162032] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314552.680640527] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 4/10.
-[sm-8] [INFO] [1782314552.680899521] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314552.942820609] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314552.948203020] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314552.980905326] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314552.981256094] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.55, 0.63)
-[sm-8] [INFO] [1782314552.981552002] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314552.982011917] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314552.982645538] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314553.019813908] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314553.020575766] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314553.022203150] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62409 / 921600
-[sm-8] [INFO] [1782314553.023017824] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314553.023563702] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314553.024264550] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314553.169830663] [lasr_vision_reid]: Added face embedding for host, total samples: 6
-[sm-8] [INFO] [1782314553.184241587] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314553.184869363] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 5/10.
-[sm-8] [INFO] [1782314553.185113063] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314553.446382246] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314553.447326317] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314553.485453975] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314553.485857724] [hri]: [detect_3d.py:response_handler:121] person at (0.55, -2.55, 0.63)
-[sm-8] [INFO] [1782314553.486799082] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314553.487265355] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314553.487943713] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314553.513861961] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314553.514763933] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314553.516093790] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62781 / 921600
-[sm-8] [INFO] [1782314553.516721878] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314553.517229329] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314553.517786484] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314553.667840094] [lasr_vision_reid]: Added face embedding for host, total samples: 7
-[sm-8] [INFO] [1782314553.680288170] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314553.680855810] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 6/10.
-[sm-8] [INFO] [1782314553.681101354] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314553.945325508] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314553.948227303] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314553.979566865] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314553.979906489] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.55, 0.64)
-[sm-8] [INFO] [1782314553.980208233] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314553.980623644] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314553.981284638] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314554.014033892] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314554.014754118] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314554.016075584] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62277 / 921600
-[sm-8] [INFO] [1782314554.016760374] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314554.017296504] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314554.022329401] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314554.175364285] [lasr_vision_reid]: Added face embedding for host, total samples: 8
-[sm-8] [INFO] [1782314554.179125038] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314554.179574131] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 7/10.
-[sm-8] [INFO] [1782314554.179820921] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314554.457184629] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314554.458051424] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314554.482368087] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314554.482714223] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.55, 0.63)
-[sm-8] [INFO] [1782314554.483085073] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314554.483508507] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314554.484296524] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314554.514328286] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314554.515042588] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314554.516755885] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 61878 / 921600
-[sm-8] [INFO] [1782314554.517576496] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314554.518215796] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314554.518902529] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314554.667921133] [lasr_vision_reid]: Added face embedding for host, total samples: 9
-[sm-8] [INFO] [1782314554.683884047] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314554.684342523] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 8/10.
-[sm-8] [INFO] [1782314554.684556137] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314554.944261048] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314554.945025393] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314554.977836684] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314554.983008059] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.55, 0.64)
-[sm-8] [INFO] [1782314554.983324956] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314554.983752262] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314554.984359854] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314555.012019468] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314555.012715398] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314555.013931927] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62211 / 921600
-[sm-8] [INFO] [1782314555.014570261] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314555.015126286] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314555.015715351] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314555.165673081] [lasr_vision_reid]: Added face embedding for host, total samples: 10
-[sm-8] [INFO] [1782314555.179575569] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314555.180140045] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 9/10.
-[sm-8] [INFO] [1782314555.180378783] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314555.444579116] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314555.445270774] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314555.480479272] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314555.480819168] [hri]: [detect_3d.py:response_handler:121] person at (0.54, -2.55, 0.63)
-[sm-8] [INFO] [1782314555.481178165] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314555.481610157] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314555.482216839] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314555.510032456] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314555.510898227] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314555.512267242] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 62616 / 921600
-[sm-8] [INFO] [1782314555.512985160] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314555.513505153] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314555.514192166] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314555.665638634] [lasr_vision_reid]: Added face embedding for host, total samples: 11
-[sm-8] [INFO] [1782314555.679431338] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [INFO] [1782314555.679880324] [hri]: [hri_learn_faces.py:execute:116] Collected enough images for the guest.
-[sm-8] [INFO] [1782314555.680122097] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314555.680360894] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314555.680582524] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_HOST' : 'succeeded' --> 'LOOK_TO_SEAT'
-[sm-8] [INFO] [1782314555.681072600] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.311, -2.717, 0.500)
-[sm-8] [INFO] [1782314555.681326976] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314555.682136453] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314556.710241428] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_TO_SEAT' : 'succeeded' --> 'SAY_SEAT_GUEST'
-[sm-8] [INFO] [1782314556.710681805] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314556.711535364] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314564.968227024] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_SEAT_GUEST' : 'succeeded' --> 'WAIT_FOR_GUEST_TO_SEAT'
-[sm-8] [INFO] [1782314564.968667033] [hri]: [wait.py:execute:21] Waiting for 5.0 seconds.
-[sm-8] [INFO] [1782314569.992201243] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT_FOR_GUEST_TO_SEAT' : 'succeeded' --> 'RESET_HEAD_2'
-[sm-8] [INFO] [1782314570.002005168] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314570.021230078] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314570.022501585] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314571.566319499] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314571.566619486] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_2' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314571.566826755] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314571.567038767] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SEAT_GUEST' : 'succeeded' --> 'CHECK'
-[sm-8] [INFO] [1782314571.567450316] [hri]: [state_machine.py:check:166] 1
-[sm-8] [INFO] [1782314571.567748717] [hri]: [state_machine.py:check:179] Guest1:
-[sm-8] [INFO] [1782314571.568049278] [hri]: [state_machine.py:check:182] name: Jeff
-[sm-8] [INFO] [1782314571.571451600] [hri]: [state_machine.py:check:182] drink: vodka
-[sm-8] [INFO] [1782314571.584610246] [hri]: [state_machine.py:check:182] detection: True
-[sm-8] [INFO] [1782314571.584925616] [hri]: [state_machine.py:check:182] seating_detection: False
-[sm-8] [INFO] [1782314571.585197664] [hri]: [state_machine.py:check:182] attributes: {'hair_color': 'black', 'hair_length': 'shoulderlength', 'glasses': True, 'hat': True, 'shirt_color': 'black'}
-[sm-8] [INFO] [1782314571.585446828] [hri]: [state_machine.py:check:182] seated_point: None
-[sm-8] [INFO] [1782314571.585677230] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK' : 'continue' --> 'GO_TO_DOOR_2'
-[sm-8] [INFO] [1782314571.585900563] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'PRE_NAV'
-[sm-8] [INFO] [1782314571.586125167] [hri]: GIVING GOAL of pre_navigation
-[sm-8] [INFO] [1782314571.586388365] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314571.587147191] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314574.353960816] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314574.354456297] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PRE_NAV' : 'succeeded' --> 'GO_TO_DOOR_POSE'
-[sm-8] [INFO] [1782314574.355876319] [hri]: Navigating to goal: 0.9737232865224763 0.6644210227864706...
-[sm-8] [INFO] [1782314607.562678143] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_DOOR_POSE' : 'succeeded' --> 'POST_NAV'
-[sm-8] [INFO] [1782314607.562963137] [hri]: GIVING GOAL of post_navigation
-[sm-8] [INFO] [1782314607.563289283] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314607.564177009] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314610.392871295] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314610.393222204] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'POST_NAV' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314610.393435646] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314610.393693100] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_DOOR_2' : 'succeeded' --> 'GREET_2'
-[sm-8] [INFO] [1782314610.394035830] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'SAY_WAITING_FOR_GUEST'
-[sm-8] [INFO] [1782314610.394465084] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314610.395485265] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314612.491857641] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_WAITING_FOR_GUEST' : 'succeeded' --> 'WAIT_FOR_GUEST'
-[sm-8] [INFO] [1782314612.492140827] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314612.492373310] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314612.755997465] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314612.767400103] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314612.801482019] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314612.801824498] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314612.834870183] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314612.835211945] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314612.835479648] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314612.835870983] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314612.836122883] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314613.093548211] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314613.094469801] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314613.126164319] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314613.127143014] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314613.158980867] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314613.159816924] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314613.160071905] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314613.160523206] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314613.160851668] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314613.423880040] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314613.424614968] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314613.455050212] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314613.455384440] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314613.485907024] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314613.491844023] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314613.492124673] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314613.492495901] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314613.492757602] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314613.757863281] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314613.758587220] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314613.792455711] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314613.793543728] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314613.825532360] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314613.825823656] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314613.826065140] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314613.826391100] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314613.826613209] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314614.089753949] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314614.090593011] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314614.120556186] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314614.121484905] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314614.158097179] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314614.158396823] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314614.158626363] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314614.158992422] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314614.159231649] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314614.421599145] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314614.431313399] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314614.457898543] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314614.458233051] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314614.490328535] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314614.490661736] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314614.490941262] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314614.491319789] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314614.491566696] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314614.758040863] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314614.758757000] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314614.786672694] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314614.787014453] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314614.817258305] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314614.822547100] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314614.822819657] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314614.823170919] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314614.823382906] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314615.083418022] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314615.085124458] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314615.117362656] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314615.118511700] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314615.152734669] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314615.153067158] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314615.153297232] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314615.153631317] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314615.153905042] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314615.420116038] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314615.420811310] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314615.451398228] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314615.451774365] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314615.488860039] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314615.489655467] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314615.489901698] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314615.490230903] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314615.490458572] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314615.749858753] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314615.750517162] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314615.784102178] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314615.784454536] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314615.817629512] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314615.822867885] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314615.823116210] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314615.823444716] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314615.823682323] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314616.079624715] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314616.083442267] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314616.122107291] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314616.123362984] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314616.154706516] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314616.155010603] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314616.155253114] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314616.155645545] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314616.155874739] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314616.434346346] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314616.453078981] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314616.487011135] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314616.487340903] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314616.517401552] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314616.517688326] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314616.517924906] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314616.518260906] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314616.518488548] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314616.789391772] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314616.790229675] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314616.817998201] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314616.818931998] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314616.852569584] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314616.852913782] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314616.853189676] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314616.853539422] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314616.853768681] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314617.115969336] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314617.116746576] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314617.151316743] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314617.151680014] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314617.182495394] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314617.183499047] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314617.183786626] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314617.184223991] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314617.184482395] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314617.450570588] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314617.451274751] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314617.482628591] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314617.483055834] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314617.518912568] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314617.519229125] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314617.519487155] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314617.519829147] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314617.520063944] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314617.775561449] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314617.779607287] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314617.795024089] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314617.795372104] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314617.833352033] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314617.848225110] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314617.848503973] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314617.848890256] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314617.849127273] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314618.120092509] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314618.121780198] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314618.149226029] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314618.149586371] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314618.184414349] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314618.184700547] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314618.184949628] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314618.185291852] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314618.185512999] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314618.446060575] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314618.446742502] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314618.481574541] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314618.481950425] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314618.514388108] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314618.514682665] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314618.514949374] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314618.515348746] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314618.515623847] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314618.778197300] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314618.778911249] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314618.794967715] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314618.795320889] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314618.828485483] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314618.838118529] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314618.841890970] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314618.848343904] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314618.848617335] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314619.112584876] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314619.116525354] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314619.147469081] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314619.147823261] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314619.184933038] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314619.185231301] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314619.185460081] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314619.185853372] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314619.186105017] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314619.448140956] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314619.448960097] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314619.483755354] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314619.484103739] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314619.514512091] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314619.514852372] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314619.515116574] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314619.515501462] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314619.515782410] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314619.781385451] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314619.785131945] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314619.813735571] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314619.814169096] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314619.837452607] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314619.850833169] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314619.851251892] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314619.851694580] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314619.852031043] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314620.110055682] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314620.112117440] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314620.145782763] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314620.150279400] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314620.182855983] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314620.183374105] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314620.183724837] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314620.184187102] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314620.184487595] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314620.448214079] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314620.448871475] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314620.478870249] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314620.479289833] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314620.514866022] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314620.516479542] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314620.516759761] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314620.517141346] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314620.517412609] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314620.776235989] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314620.776948773] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314620.792351850] [hri]: [detect_3d.py:response_handler:119] Got 0 detections
-[sm-8] [INFO] [1782314620.792816042] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314620.822033588] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314620.840884186] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314620.848199388] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314620.848719667] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314620.849017984] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314621.119091956] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314621.121350361] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314621.145923740] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314621.146249983] [hri]: [detect_3d.py:response_handler:121] person at (-0.65, 0.15, 1.57)
-[sm-8] [INFO] [1782314621.146614617] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314621.179656822] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.6464012746261173, y:0.15432992339275858, z:1.565025196475478
-[sm-8] [INFO] [1782314621.180288658] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314621.180534013] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314621.180740557] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314621.181084390] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314621.181290785] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314621.437975990] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314621.443169897] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314621.481112955] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314621.482933278] [hri]: [detect_3d.py:response_handler:121] person at (-0.54, 0.30, 1.17)
-[sm-8] [INFO] [1782314621.483203876] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314621.514532009] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.5372319853007532, y:0.29707506793757477, z:1.174778033724748
-[sm-8] [INFO] [1782314621.515096516] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314621.515321018] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314621.515532804] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314621.515874823] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314621.516138557] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314621.790771835] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314621.814084354] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314621.846138532] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314621.846499860] [hri]: [detect_3d.py:response_handler:121] person at (-0.52, 0.46, 1.17)
-[sm-8] [INFO] [1782314621.847854662] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314621.885378961] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.5208812876911361, y:0.4642845707176593, z:1.1666597692807943
-[sm-8] [INFO] [1782314621.885965014] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314621.886348844] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314621.886724559] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314621.887172656] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314621.887498996] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314622.143086212] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314622.143819706] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314622.176101215] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314622.176426030] [hri]: [detect_3d.py:response_handler:121] person at (-0.45, 0.72, 1.15)
-[sm-8] [INFO] [1782314622.177398352] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314622.215859877] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.45435553612008295, y:0.7172188699020331, z:1.1491240598070962
-[sm-8] [INFO] [1782314622.216438995] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314622.216669661] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314622.216922813] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314622.217255985] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314622.217488851] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314622.483431521] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314622.503774556] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314622.556307246] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314622.556671450] [hri]: [detect_3d.py:response_handler:121] person at (-0.35, 0.90, 1.17)
-[sm-8] [INFO] [1782314622.562837817] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314622.588145237] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.35495940375451907, y:0.9000778754817584, z:1.171071568265971
-[sm-8] [INFO] [1782314622.588705891] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314622.589035045] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314622.589266265] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314622.589606542] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314622.589908116] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314622.844444604] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314622.845102348] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314622.878556866] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314622.878891990] [hri]: [detect_3d.py:response_handler:121] person at (-0.17, 1.08, 1.21)
-[sm-8] [INFO] [1782314622.879190235] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314622.913053252] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.1748315664970238, y:1.0826080554759048, z:1.2068920388641595
-[sm-8] [INFO] [1782314622.913645204] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314622.913895901] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314622.914130810] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314622.914447568] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314622.914664046] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314623.172123847] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314623.172762733] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314623.213830825] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314623.214196607] [hri]: [detect_3d.py:response_handler:121] person at (-0.16, 1.16, 1.13)
-[sm-8] [INFO] [1782314623.215293735] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314623.244829317] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.15810316582080508, y:1.161360066404817, z:1.125632086517693
-[sm-8] [INFO] [1782314623.245411540] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314623.245644239] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314623.245910412] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314623.246261969] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314623.246529113] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314623.508535120] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314623.509351899] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314623.541094579] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314623.541433628] [hri]: [detect_3d.py:response_handler:121] person at (-0.26, 1.28, 1.04)
-[sm-8] [INFO] [1782314623.542497492] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314623.577306400] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.25927891596940467, y:1.2756353339284188, z:1.0440256581109146
-[sm-8] [INFO] [1782314623.577779592] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314623.578047023] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314623.578268012] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314623.578578505] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314623.578818245] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314623.838814637] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314623.840333868] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314623.878932250] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314623.879281637] [hri]: [detect_3d.py:response_handler:121] person at (-0.29, 1.31, 1.00)
-[sm-8] [INFO] [1782314623.879642678] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314623.911423514] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.29146107594566817, y:1.3076744003758705, z:1.0034226703050166
-[sm-8] [INFO] [1782314623.911901735] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314623.912153048] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314623.912373547] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314623.912726222] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314623.912962639] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314624.173200739] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314624.174913770] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314624.208538672] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314624.208858590] [hri]: [detect_3d.py:response_handler:121] person at (-0.30, 1.31, 1.00)
-[sm-8] [INFO] [1782314624.209193724] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314624.243985839] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.3034046010289967, y:1.3090350336714904, z:0.9968509522024498
-[sm-8] [INFO] [1782314624.244497457] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314624.244718805] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314624.244930462] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314624.245263289] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314624.245490381] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314624.505268256] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314624.505860073] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314624.540909623] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314624.541309838] [hri]: [detect_3d.py:response_handler:121] person at (-0.29, 1.29, 1.03)
-[sm-8] [INFO] [1782314624.541650458] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314624.572593460] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.2923297479902547, y:1.2870572972806351, z:1.0254125963179312
-[sm-8] [INFO] [1782314624.573157004] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314624.573386240] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314624.573611420] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314624.573962675] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314624.574242375] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314624.836921225] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314624.837570789] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314624.875900708] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314624.876309513] [hri]: [detect_3d.py:response_handler:121] person at (-0.27, 1.22, 1.16)
-[sm-8] [INFO] [1782314624.876649918] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314624.909848948] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.2682151006738669, y:1.2248088549915073, z:1.1565833118281894
-[sm-8] [INFO] [1782314624.910377474] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314624.910617219] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314624.910854681] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314624.911257371] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314624.911496111] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314625.176110883] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314625.203451837] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314625.236945801] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314625.237284534] [hri]: [detect_3d.py:response_handler:121] person at (-0.31, 1.12, 1.14)
-[sm-8] [INFO] [1782314625.237587011] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314625.276009927] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.3104917192148795, y:1.1234991110187118, z:1.1433096621821344
-[sm-8] [INFO] [1782314625.276471037] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314625.276695577] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314625.276899995] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314625.277195010] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314625.277415632] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314625.545619580] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314625.559962289] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314625.604341107] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314625.609820846] [hri]: [detect_3d.py:response_handler:121] person at (-0.26, 1.07, 1.16)
-[sm-8] [INFO] [1782314625.610116907] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314625.639906996] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.2603595509479777, y:1.0654611268582719, z:1.1646785421613097
-[sm-8] [INFO] [1782314625.640444592] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314625.640690806] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314625.640954503] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314625.641325668] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'not_done' --> 'DETECT_PEOPLE_3D'
-[sm-8] [INFO] [1782314625.641580851] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314625.910225190] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314625.911134877] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314625.942298576] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314625.942609372] [hri]: [detect_3d.py:response_handler:121] person at (-0.13, 0.98, 1.19)
-[sm-8] [INFO] [1782314625.942962975] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314625.976003545] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:-0.1330882746383899, y:0.9819475239175945, z:1.1931859943726002
-[sm-8] [INFO] [1782314625.976838846] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314625.977076217] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314625.977345360] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_PEOPLE_3D' : 'succeeded' --> 'CHECK_FOR_PERSON'
-[sm-8] [INFO] [1782314625.977792258] [hri]: [wait_for_person_in_area.py:execute:22] Found 1 people in wait area.
-[sm-8] [INFO] [1782314625.978044179] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_FOR_PERSON' : 'done' --> 'succeeded'
-[sm-8] [INFO] [1782314625.984304254] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314625.984529170] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT_FOR_GUEST' : 'succeeded' --> 'GET_PERSON_POINT'
-[sm-8] [INFO] [1782314625.984923047] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_PERSON_POINT' : 'succeeded' --> 'LOOK_AND_GREET'
-[sm-8] [INFO] [1782314626.006232781] [hri]: [action_state.py:execute:165] Waiting for action '/lasr_vision_eye_tracker/track_eyes'
-[sm-8] [INFO] [1782314626.007669062] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'GREET_AND_ASK_GUEST'
-[sm-8] [INFO] [1782314626.008312995] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'SAY'
-[sm-8] [INFO] [1782314626.008460545] [hri]: [action_state.py:execute:189] Sending goal to action '/lasr_vision_eye_tracker/track_eyes'
-[sm-8] [INFO] [1782314626.008937539] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[eye_tracker_action_server-5] [INFO] [1782314626.009616355] [eye_tracker_action_server]: Received eye tracker goal
-[sm-8] [INFO] [1782314626.009694876] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[eye_tracker_action_server-5] [INFO] [1782314626.010668725] [eye_tracker_action_server]: Beginning eye tracking...
-[sm-8] [INFO] [1782314632.215844471] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY' : 'succeeded' --> 'LISTEN'
-[sm-8] [INFO] [1782314632.216400512] [hri]: [action_state.py:execute:165] Waiting for action 'transcribe_speech'
-[sm-8] [INFO] [1782314632.226896901] [hri]: [action_state.py:execute:189] Sending goal to action 'transcribe_speech'
-[transcribe_microphone_server-6] [INFO] [1782314632.228604296] [whisper_mic_server]: Request Received
-[transcribe_microphone_server-6] [INFO] [1782314640.191914966] [whisper_mic_server]: Transcribing phrase with Whisper...
-[transcribe_microphone_server-6] [INFO] [1782314640.730958380] [whisper_mic_server]: Transcription finished!
-[transcribe_microphone_server-6] [INFO] [1782314640.731307259] [whisper_mic_server]: Time taken: 0.54s
-[transcribe_microphone_server-6] [INFO] [1782314640.731788377] [whisper_mic_server]: Transcribed phrase: Hi Tiago, my name is Fadi and my favourite drink is peach iced tea.
-[transcribe_microphone_server-6] [INFO] [1782314640.732186534] [whisper_mic_server]: transcribe_speech has succeeded
-[sm-8] [INFO] [1782314640.759094330] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LISTEN' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314640.759452915] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314640.759803030] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GREET_AND_ASK_GUEST' : 'succeeded' --> 'GET_NAME_DRINK_FACE'
-[sm-8] [INFO] [1782314640.763034479] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_3D'
-[sm-8] [INFO] [1782314640.763291447] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'INITIALISE_DETECTION_FLAG'
-[sm-8] [INFO] [1782314640.763973799] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'PARSE_NAME'
-[sm-8] [INFO] [1782314640.764201501] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'INITIALISE_DETECTION_FLAG' : 'succeeded' --> 'GET_GUEST_ATTRIBUTES'
-[sm-8] [INFO] [1782314640.764860127] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'GET_IMAGE'
-[sm-8] [INFO] [1782314640.765480709] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_IMAGE' : 'succeeded' --> 'GET_ATTRIBUTES'
-[sm-8] [INFO] [1782314640.765921796] [hri]: [service_state.py:execute:138] Waiting for service '/hri_task/query_llm'
-[sm-8] [INFO] [1782314640.766940554] [hri]: [service_state.py:execute:138] Waiting for service '/vlm/describe_people'
-[sm-8] [INFO] [1782314640.767577317] [hri]: [service_state.py:execute:153] Sending request to service '/hri_task/query_llm'
-[sm-8] [INFO] [1782314640.767859484] [hri]: [service_state.py:execute:153] Sending request to service '/vlm/describe_people'
-[hri_task_service-7] [INFO] [1782314640.768335203] [llm]: Received query: Hi Tiago, my name is Fadi and my favourite drink is peach iced tea., and task is name
-[vlm_service-4] [INFO] [1782314640.773548046] [lasr_vlm_service]: Received request to describe person
-[sm-8] [INFO] [1782314641.027216269] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314641.029511642] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314641.060096178] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314641.060628686] [hri]: [detect_3d.py:response_handler:121] person at (-0.17, 0.79, 1.39)
-[sm-8] [INFO] [1782314641.061055480] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314641.066998423] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314641.067885452] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314641.104050516] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314641.125845504] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314641.127656898] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 106146 / 921600
-[sm-8] [INFO] [1782314641.133732044] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314641.134569782] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314641.135330090] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314641.315358363] [lasr_vision_reid]: Added face embedding for guest2, total samples: 1
-[sm-8] [INFO] [1782314641.337015615] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314641.362595092] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 0/10.
-[sm-8] [INFO] [1782314641.363999794] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314641.635511183] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314641.656937329] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314641.694478427] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314641.694852226] [hri]: [detect_3d.py:response_handler:121] person at (-0.18, 0.79, 1.37)
-[sm-8] [INFO] [1782314641.695228145] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314641.695696219] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314641.696436935] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314641.725318604] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314641.726133535] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314641.727903386] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 107505 / 921600
-[sm-8] [INFO] [1782314641.735684924] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314641.736426123] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314641.761942493] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314641.935106224] [lasr_vision_reid]: Added face embedding for guest2, total samples: 2
-[sm-8] [INFO] [1782314641.958701824] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314641.959623833] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 1/10.
-[sm-8] [INFO] [1782314641.960103136] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314642.227640824] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314642.229840015] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314642.257228103] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314642.257595778] [hri]: [detect_3d.py:response_handler:121] person at (-0.18, 0.77, 1.38)
-[sm-8] [INFO] [1782314642.257959462] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314642.259973153] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314642.260572495] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314642.293681643] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314642.294373171] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314642.295881646] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 108780 / 921600
-[sm-8] [INFO] [1782314642.296686453] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314642.297248882] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314642.297872691] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314642.470314206] [lasr_vision_reid]: Added face embedding for guest2, total samples: 3
-[sm-8] [INFO] [1782314642.491780612] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314642.492677364] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 2/10.
-[sm-8] [INFO] [1782314642.493065699] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314642.780444297] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314642.793430607] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314642.833409543] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314642.833790491] [hri]: [detect_3d.py:response_handler:121] person at (-0.19, 0.75, 1.38)
-[sm-8] [INFO] [1782314642.834164870] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314642.846151387] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314642.856584224] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314642.904823844] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314642.924009978] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314642.925482188] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 111084 / 921600
-[sm-8] [INFO] [1782314642.926386736] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314642.927078963] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314642.927752650] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314643.105883871] [lasr_vision_reid]: Added face embedding for guest2, total samples: 4
-[sm-8] [INFO] [1782314643.128040037] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314643.160042660] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 3/10.
-[sm-8] [INFO] [1782314643.160458255] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314643.427546560] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314643.430225503] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314643.461040207] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314643.461423829] [hri]: [detect_3d.py:response_handler:121] person at (-0.18, 0.72, 1.38)
-[sm-8] [INFO] [1782314643.461832814] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314643.462306725] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314643.462943621] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314643.523054150] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314643.524284827] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314643.525947807] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 111579 / 921600
-[sm-8] [INFO] [1782314643.526733831] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314643.527395513] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314643.560908592] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314643.737798542] [lasr_vision_reid]: Added face embedding for guest2, total samples: 5
-[sm-8] [INFO] [1782314643.757536708] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314643.759735766] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 4/10.
-[sm-8] [INFO] [1782314643.760114387] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314644.030815995] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314644.034965670] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314644.062114260] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314644.062440605] [hri]: [detect_3d.py:response_handler:121] person at (-0.16, 0.76, 1.38)
-[sm-8] [INFO] [1782314644.074959294] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314644.092902796] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314644.093687633] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314644.122049314] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314644.122837495] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314644.124324484] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 109299 / 921600
-[sm-8] [INFO] [1782314644.125164453] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314644.125772846] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314644.126418401] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314644.304898204] [lasr_vision_reid]: Added face embedding for guest2, total samples: 6
-[sm-8] [INFO] [1782314644.327541529] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314644.346301422] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 5/10.
-[sm-8] [INFO] [1782314644.355107862] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314644.629694267] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314644.630378191] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314644.660291751] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314644.660637472] [hri]: [detect_3d.py:response_handler:121] person at (-0.18, 0.97, 1.37)
-[sm-8] [INFO] [1782314644.661014447] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314644.661455598] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314644.683859074] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314644.724816102] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314644.725647653] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314644.726990837] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 96336 / 921600
-[sm-8] [INFO] [1782314644.727791903] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314644.741324149] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314644.761804498] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314644.939130543] [lasr_vision_reid]: Added face embedding for guest2, total samples: 7
-[sm-8] [INFO] [1782314644.955904118] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314644.956472573] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 6/10.
-[sm-8] [INFO] [1782314644.956773960] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314645.230938225] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314645.254534109] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314645.292779954] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314645.293160754] [hri]: [detect_3d.py:response_handler:121] person at (-0.20, 1.17, 1.39)
-[sm-8] [INFO] [1782314645.293538688] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314645.294012813] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314645.294693636] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314645.361345284] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314645.362360292] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314645.363900624] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 88296 / 921600
-[sm-8] [INFO] [1782314645.386457892] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314645.387936129] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314645.390485296] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314645.574634274] [lasr_vision_reid]: Added face embedding for guest2, total samples: 8
-[sm-8] [INFO] [1782314645.592386947] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314645.593303406] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 7/10.
-[sm-8] [INFO] [1782314645.593735288] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314645.851882388] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314645.852605759] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[yolo_service_node-2] /home/rexy/fadi_ws/install/lasr_vision_yolo/share/lasr_vision_yolo/venv/lib/python3.10/site-packages/numpy/core/fromnumeric.py:3464: RuntimeWarning: Mean of empty slice.
-[yolo_service_node-2] return _methods._mean(a, axis=axis, dtype=dtype,
-[yolo_service_node-2] /home/rexy/fadi_ws/install/lasr_vision_yolo/share/lasr_vision_yolo/venv/lib/python3.10/site-packages/numpy/core/_methods.py:184: RuntimeWarning: invalid value encountered in divide
-[yolo_service_node-2] ret = um.true_divide(
-[sm-8] [INFO] [1782314645.895809165] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314645.896219869] [hri]: [detect_3d.py:response_handler:121] person at (nan, nan, nan)
-[sm-8] [INFO] [1782314645.909032528] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314645.920106021] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314645.921041016] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314645.960469010] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314645.961383250] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314645.962839321] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 30339 / 921600
-[sm-8] [INFO] [1782314645.984285270] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314645.985203467] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314645.985962058] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314646.174642651] [lasr_vision_reid]: Added face embedding for guest2, total samples: 9
-[sm-8] [INFO] [1782314646.194094018] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314646.194819691] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 8/10.
-[sm-8] [INFO] [1782314646.219912825] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314646.492885375] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314646.493660488] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314646.519584126] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314646.519918717] [hri]: [detect_3d.py:response_handler:121] person at (nan, nan, nan)
-[sm-8] [INFO] [1782314646.520450494] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314646.521001274] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314646.521661406] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314646.554404791] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314646.819729031] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314646.820456296] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314646.857068981] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314646.857649577] [hri]: [detect_3d.py:response_handler:121] person at (nan, nan, nan)
-[sm-8] [INFO] [1782314646.858204676] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314646.862487821] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314646.887136061] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314646.921386965] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314647.182708336] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314647.183580625] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314647.251088038] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314647.252002330] [hri]: [detect_3d.py:response_handler:121] person at (-1.29, 1.68, 2.06)
-[sm-8] [INFO] [1782314647.252421004] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314647.252856831] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314647.253516791] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314647.291940778] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314647.553170036] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314647.553915282] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314647.625244663] [hri]: [detect_3d.py:response_handler:119] Got 1 detections
-[sm-8] [INFO] [1782314647.625869081] [hri]: [detect_3d.py:response_handler:121] person at (-0.19, 0.92, 1.59)
-[sm-8] [INFO] [1782314647.626356016] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314647.626929733] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314647.650370752] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314647.717075185] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314647.717870332] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314647.719822945] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 28014 / 921600
-[sm-8] [INFO] [1782314647.720689788] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314647.721526850] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314647.722328403] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314647.893497942] [lasr_vision_reid]: Added face embedding for guest2, total samples: 10
-[sm-8] [INFO] [1782314647.917140610] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [WARN] [1782314647.917791233] [hri]: [hri_learn_faces.py:execute:120] Not enough images collected for the guest: 9/10.
-[sm-8] [INFO] [1782314647.929642377] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'failed' --> 'DETECT_3D'
-[sm-8] [INFO] [1782314648.184694675] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314648.185605725] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314648.216659708] [hri]: [detect_3d.py:response_handler:119] Got 2 detections
-[sm-8] [INFO] [1782314648.217060069] [hri]: [detect_3d.py:response_handler:121] person at (-0.20, 0.78, 1.45)
-[sm-8] [INFO] [1782314648.217380633] [hri]: [detect_3d.py:response_handler:121] person at (-2.14, -0.38, 1.43)
-[sm-8] [INFO] [1782314648.217766119] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_3D' : 'succeeded' --> 'CHECK_EYES'
-[sm-8] [INFO] [1782314648.247883190] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314648.251473642] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect_pose'
-[sm-8] [INFO] [1782314648.292577743] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_EYES' : 'succeeded' --> 'CROP_IMAGE_3D'
-[sm-8] [INFO] [1782314648.321779520] [hri]: [crop_image_3d.py:execute:162] Processing person:
-[sm-8] [INFO] [1782314648.323391656] [hri]: [crop_image_3d.py:execute:174] stencil filled pixels: 7548 / 921600
-[sm-8] [INFO] [1782314648.324375899] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CROP_IMAGE_3D' : 'succeeded' --> 'LEARN_FACE'
-[sm-8] [INFO] [1782314648.326526819] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/add_face'
-[sm-8] [INFO] [1782314648.355914734] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/add_face'
-[service-3] [INFO] [1782314648.536055419] [lasr_vision_reid]: Added face embedding for guest2, total samples: 11
-[sm-8] [INFO] [1782314648.552340355] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LEARN_FACE' : 'succeeded' --> 'CHECK_DONE'
-[sm-8] [INFO] [1782314648.553296022] [hri]: [hri_learn_faces.py:execute:116] Collected enough images for the guest.
-[sm-8] [INFO] [1782314648.553790855] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK_DONE' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314648.554201791] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[vlm_service-4] [INFO] [1782314655.857521850] [lasr_vlm_service]: VLM result: {'hair_color': ['brown'], 'hair_length': ['short'], 'glasses': [True], 'hat': [True], 'shirt color': ['beige']}
-[sm-8] [INFO] [1782314655.877937615] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_ATTRIBUTES' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314655.878280900] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314655.878540807] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_GUEST_ATTRIBUTES' : 'succeeded' --> 'HANDLE_GUEST_ATTRIBUTES'
-[sm-8] [INFO] [1782314655.878996857] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'HANDLE_GUEST_ATTRIBUTES' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314655.879245838] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[hri_task_service-7] [INFO] [1782314665.431810703] [llm]: LLM output: Name: Fadi
-[hri_task_service-7] [INFO] [1782314665.432142688] [llm]: Returning response: lasr_llm_interfaces.msg.ReceptionistResponse(name='Fadi', favourite_drink='', interests='', interest_commonality='', llm_response='Name: Fadi')
-[sm-8] [INFO] [1782314665.458876787] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PARSE_NAME' : 'succeeded' --> 'PARSE_DRINK'
-[sm-8] [INFO] [1782314665.460001435] [hri]: [service_state.py:execute:138] Waiting for service '/hri_task/query_llm'
-[sm-8] [INFO] [1782314665.460782251] [hri]: [service_state.py:execute:153] Sending request to service '/hri_task/query_llm'
-[hri_task_service-7] [INFO] [1782314665.461716075] [llm]: Received query: Hi Tiago, my name is Fadi and my favourite drink is peach iced tea., and task is drink
-[hri_task_service-7] [INFO] [1782314666.038225424] [llm]: LLM output: Favourite drink: peach iced tea
-[hri_task_service-7] [INFO] [1782314666.038517132] [llm]: Returning response: lasr_llm_interfaces.msg.ReceptionistResponse(name='', favourite_drink='peach iced tea', interests='', interest_commonality='', llm_response='Favourite drink: peach iced tea')
-[sm-8] [INFO] [1782314666.057928853] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PARSE_DRINK' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314666.058403762] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314666.059198456] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_NAME_DRINK_FACE' : 'succeeded' --> 'GET_ATTRIBUTE_STR'
-[sm-8] [INFO] [1782314666.059942917] [hri]: [greet.py:get_guest1_attributes:277] Attribute string: Hello Fadi, welcome to the party! Jeff has already arrived and is sitting down. They have black coloured hair. have shoulderlength hair. are wearing glasses. are wearing a hat. are wearing a black coloured shirt.
-[sm-8] [INFO] [1782314666.060292518] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_ATTRIBUTE_STR' : 'succeeded' --> 'SAY_ATTRIBUTE'
-[sm-8] [INFO] [1782314666.060745718] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314666.061662393] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314684.473998082] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_ATTRIBUTE' : 'succeeded' --> 'STOP_EYE_TRACKING_2'
-[sm-8] [INFO] [1782314684.501283235] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'STOP_EYE_TRACKING_2' : 'succeeded' --> 'WAIT'
-[sm-8] [INFO] [1782314684.501920333] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314684.971959524] [hri]: [eye_tracker.py:handle_feedback:24] Cancelling current eye tracker
-[eye_tracker_action_server-5] [INFO] [1782314684.973451125] [eye_tracker_action_server]: Eye Tracker Action Server cancellation requested
-[sm-8] [INFO] [1782314685.033959461] [hri]: [state.hpp:cancel_state:173] Canceling state 'StartEyeTracker'
-[eye_tracker_action_server-5] [INFO] [1782314685.425461999] [eye_tracker_action_server]: Eye Tracker Action Server canceled, stopping tracking.
-[eye_tracker_action_server-5] [INFO] [1782314685.935831601] [eye_tracker_action_server]: Canceled EYE TRACKER
-[sm-8] [INFO] [1782314686.517505703] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT' : 'succeeded' --> 'GRAB_BAG'
-[sm-8] [INFO] [1782314686.519402372] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'CLEAR_OCTOMAP'
-[sm-8] [INFO] [1782314686.519810019] [hri]: [service_state.py:execute:138] Waiting for service '/clear_octomap'
-[sm-8] [INFO] [1782314686.520533403] [hri]: [service_state.py:execute:153] Sending request to service '/clear_octomap'
-[sm-8] [INFO] [1782314686.523651385] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CLEAR_OCTOMAP' : 'succeeded' --> 'LOOK_AROUND'
-[sm-8] [INFO] [1782314686.523959716] [hri]: GIVING GOAL of head_tour
-[sm-8] [INFO] [1782314686.524276042] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314686.525160378] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314701.553988281] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314701.554296896] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AROUND' : 'succeeded' --> 'SAY_REACH_ARM'
-[sm-8] [INFO] [1782314701.554610100] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314701.555497250] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314707.880800984] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_REACH_ARM' : 'succeeded' --> 'REACH_ARM'
-[sm-8] [INFO] [1782314707.883639393] [hri]: GIVING GOAL of reach_arm_vertical_gripper
-[sm-8] [INFO] [1782314707.885310405] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314707.886193264] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314711.246385374] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314711.246722711] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'REACH_ARM' : 'succeeded' --> 'OPEN_GRIPPER'
-[sm-8] [INFO] [1782314711.246968857] [hri]: GIVING GOAL of open_gripper
-[sm-8] [INFO] [1782314711.247241461] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314711.248144338] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314712.275580385] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314712.275904699] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'OPEN_GRIPPER' : 'succeeded' --> 'SAY_PLACE'
-[sm-8] [INFO] [1782314712.276231321] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314712.277147819] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314718.162399897] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_PLACE' : 'succeeded' --> 'WAIT_5'
-[sm-8] [INFO] [1782314718.162836441] [hri]: [wait.py:execute:21] Waiting for 5 seconds.
-[sm-8] [INFO] [1782314723.168260444] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT_5' : 'succeeded' --> 'CLOSE_HALF_GRIPPER'
-[sm-8] [INFO] [1782314723.169841727] [hri]: GIVING GOAL of close_half
-[sm-8] [INFO] [1782314723.170179995] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314723.178340560] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314723.722560863] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314723.722911730] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CLOSE_HALF_GRIPPER' : 'succeeded' --> 'FOLD_ARM'
-[sm-8] [INFO] [1782314723.723177988] [hri]: GIVING GOAL of cml_arm_away
-[sm-8] [INFO] [1782314723.723469234] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314723.724587364] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314726.614175379] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314726.615601023] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FOLD_ARM' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314726.615828159] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314726.616027403] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GRAB_BAG' : 'succeeded' --> 'SAY_WELCOME_2'
-[sm-8] [INFO] [1782314726.616321796] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314726.617068211] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314729.315162849] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_WELCOME_2' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314729.315512520] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314729.316268275] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AND_GREET' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314729.316692914] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314729.317070993] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GREET_2' : 'succeeded' --> 'GUIDE_TO_SEAT_2'
-[sm-8] [INFO] [1782314729.317916445] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'PRE_NAV'
-[sm-8] [INFO] [1782314729.319184170] [hri]: GIVING GOAL of pre_navigation
-[sm-8] [INFO] [1782314729.319479600] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314729.320314686] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314731.212686057] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314731.221484874] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PRE_NAV' : 'succeeded' --> 'GO_TO_SEAT_POSE'
-[sm-8] [INFO] [1782314731.223214705] [hri]: Navigating to goal: 0.9241805428867255 -0.37066992922907555...
-[sm-8] [INFO] [1782314748.955732591] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GO_TO_SEAT_POSE' : 'succeeded' --> 'POST_NAV'
-[sm-8] [INFO] [1782314748.956056080] [hri]: GIVING GOAL of post_navigation
-[sm-8] [INFO] [1782314748.956443263] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314748.957414900] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314750.740932151] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314750.745536226] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'POST_NAV' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314750.748705274] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314750.749084035] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GUIDE_TO_SEAT_2' : 'succeeded' --> 'SEAT_GUEST_2'
-[sm-8] [INFO] [1782314750.749472973] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'SAY_FINDING_SEAT'
-[sm-8] [INFO] [1782314750.749912040] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314750.750797355] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314753.146213758] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_FINDING_SEAT' : 'succeeded' --> 'RESET_HEAD_1'
-[sm-8] [INFO] [1782314753.146492001] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314753.146811020] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314753.148847828] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314754.682586911] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314754.684283182] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_1' : 'succeeded' --> 'DETECT_ALL_PEOPLE_SEATS'
-[sm-8] [INFO] [1782314754.684577775] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'INIT_BLACKBOARD'
-[sm-8] [INFO] [1782314754.687567849] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'INIT_BLACKBOARD' : 'succeeded' --> 'CALCULATE_SWEEP_POINTS'
-[sm-8] [INFO] [1782314754.687961413] [hri]: [detect_all_in_polygon.py:_calculate_sweep_points:300] Waiting for camera info and TF to map frame...
-[sm-8] [INFO] [1782314754.750947396] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 0.28%, score: 0.01
-[sm-8] [INFO] [1782314754.752294906] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 0.56%, score: 0.01
-[sm-8] [INFO] [1782314754.753373424] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 0.83%, score: 0.01
-[sm-8] [INFO] [1782314754.754394250] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 1.09%, score: 0.01
-[sm-8] [INFO] [1782314754.755421138] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 1.34%, score: 0.01
-[sm-8] [INFO] [1782314754.756368926] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 1.58%, score: 0.01
-[sm-8] [INFO] [1782314754.784948514] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 1.77%, score: 0.00
-[sm-8] [INFO] [1782314754.785970891] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 1.96%, score: 0.00
-[sm-8] [INFO] [1782314754.786667015] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 2.14%, score: 0.00
-[sm-8] [INFO] [1782314754.787248435] [hri]: [detect_all_in_polygon.py:_greedy_coverage_min_overlap:287] Selected new footprint, total coverage: 2.32%, score: 0.00
-[sm-8] [INFO] [1782314754.835656263] [hri]: [detect_all_in_polygon.py:_calculate_sweep_points:349] Calculated 10 sweep points.
-[sm-8] [INFO] [1782314754.838323630] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CALCULATE_SWEEP_POINTS' : 'succeeded' --> 'LOOK_AND_DETECT'
-[sm-8] [INFO] [1782314754.846469617] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314754.847010351] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 0
-[sm-8] [INFO] [1782314754.847464260] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314754.848007332] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.216, -1.923, 0.700)
-[sm-8] [INFO] [1782314754.849213064] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314754.851233035] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314755.909084546] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'succeeded' --> 'SLEEP'
-[sm-8] [INFO] [1782314755.909482282] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314757.915090574] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314757.915474249] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314758.166634037] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314758.167445147] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314758.211987496] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314758.212316426] [hri]: [detect_3d.py:response_handler:121] person at (0.62, -2.73, 0.58)
-[sm-8] [INFO] [1782314758.212657401] [hri]: [detect_3d.py:response_handler:121] chair at (-0.24, -1.67, 0.50)
-[sm-8] [INFO] [1782314758.212978355] [hri]: [detect_3d.py:response_handler:121] person at (0.20, -2.30, 0.50)
-[sm-8] [INFO] [1782314758.213305828] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314758.247570967] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.6193406740954449, y:-2.730382238197708, z:0.5803075375904453
-[sm-8] [INFO] [1782314758.248074858] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.2352875350233149, y:-1.6654367004297261, z:0.49727366850470844
-[sm-8] [INFO] [1782314758.248481484] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.2029386573330394, y:-2.301679510603871, z:0.5039309202759044
-[sm-8] [INFO] [1782314758.249100691] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314758.249346548] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314758.249602468] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314758.250195267] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314758.250377498] [hri]: Detected objects:
-[sm-8] [INFO] [1782314758.251488873] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314758.271567699] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314758.274398002] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314758.274694105] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314758.275169621] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 1
-[sm-8] [INFO] [1782314758.275509434] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314758.275996053] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(-0.008, -2.560, 0.700)
-[sm-8] [INFO] [1782314758.276281546] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314758.277095874] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [WARN] [1782314763.294854306] [hri]: [action_state.py:execute:205] Timeout reached while waiting for response from action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314763.295188226] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'timeout' --> 'SLEEP'
-[sm-8] [INFO] [1782314763.295584694] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314765.299067420] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314765.299400201] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314765.556154189] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314765.556795988] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314765.603180226] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314765.603503869] [hri]: [detect_3d.py:response_handler:121] chair at (-0.19, -1.75, 0.47)
-[sm-8] [INFO] [1782314765.603839186] [hri]: [detect_3d.py:response_handler:121] person at (0.61, -2.76, 0.59)
-[sm-8] [INFO] [1782314765.604154936] [hri]: [detect_3d.py:response_handler:121] person at (0.13, -2.49, 0.68)
-[sm-8] [INFO] [1782314765.604465094] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314765.636939270] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.19499963590159608, y:-1.7524832865094861, z:0.46965134003622877
-[sm-8] [INFO] [1782314765.637427294] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.6069791540043993, y:-2.7629716449820894, z:0.5906246529624255
-[sm-8] [INFO] [1782314765.637828198] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.13489937047857548, y:-2.4945818158541537, z:0.6807242030588793
-[sm-8] [INFO] [1782314765.660340836] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314765.662391909] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314765.664804083] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314765.666551218] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314765.666859775] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314765.667128885] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314765.667419116] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314765.667593680] [hri]: Detected objects:
-[sm-8] [INFO] [1782314765.667813484] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314765.667993971] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314765.668166641] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314765.668402776] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314765.669918965] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 2
-[sm-8] [INFO] [1782314765.670293523] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314765.670738324] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.435, -1.724, 0.700)
-[sm-8] [INFO] [1782314765.671044344] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314765.671859244] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314765.695904661] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314765.696788869] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314767.699216268] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314767.699632015] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314767.951437592] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314767.952320347] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314767.990904932] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314767.991306505] [hri]: [detect_3d.py:response_handler:121] chair at (-0.12, -1.77, 0.45)
-[sm-8] [INFO] [1782314767.991718101] [hri]: [detect_3d.py:response_handler:121] person at (0.62, -2.71, 0.57)
-[sm-8] [INFO] [1782314767.992101609] [hri]: [detect_3d.py:response_handler:121] person at (0.22, -2.26, 0.48)
-[sm-8] [INFO] [1782314767.992431474] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314768.025748497] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.11879501187750585, y:-1.7688946509903127, z:0.45339158872571383
-[sm-8] [INFO] [1782314768.026240569] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.622078968422792, y:-2.711968346563429, z:0.5733567938350658
-[sm-8] [INFO] [1782314768.026593389] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.2173912171536757, y:-2.2596572571166624, z:0.484072073526326
-[sm-8] [INFO] [1782314768.027240037] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314768.027463081] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314768.027680195] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314768.028106362] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314768.028372168] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314768.028661186] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314768.028999735] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314768.029168515] [hri]: Detected objects:
-[sm-8] [INFO] [1782314768.029377051] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314768.029698303] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314768.029887664] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314768.030129756] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314768.030472394] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 3
-[sm-8] [INFO] [1782314768.030779386] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314768.031189002] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.415, -1.620, 0.700)
-[sm-8] [INFO] [1782314768.031467315] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314768.032293170] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314769.024420612] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'succeeded' --> 'SLEEP'
-[sm-8] [INFO] [1782314769.024857095] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314771.026314539] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314771.026692987] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314771.285275815] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314771.285931884] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314771.316143461] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314771.316487077] [hri]: [detect_3d.py:response_handler:121] chair at (-0.17, -1.73, 0.48)
-[sm-8] [INFO] [1782314771.316781040] [hri]: [detect_3d.py:response_handler:121] person at (0.61, -2.73, 0.56)
-[sm-8] [INFO] [1782314771.317051062] [hri]: [detect_3d.py:response_handler:121] person at (0.14, -2.42, 0.64)
-[sm-8] [INFO] [1782314771.317347297] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314771.354817932] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.1731672638959224, y:-1.7251520101109095, z:0.4818593643113742
-[sm-8] [INFO] [1782314771.355231981] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.6104313443534934, y:-2.7261472036088223, z:0.5582490170953512
-[sm-8] [INFO] [1782314771.355557862] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.13592449385926575, y:-2.422750813020721, z:0.642262441839883
-[sm-8] [INFO] [1782314771.356086460] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314771.356316429] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314771.356546992] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314771.356930225] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314771.357201361] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314771.357450427] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314771.357739047] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314771.357926745] [hri]: Detected objects:
-[sm-8] [INFO] [1782314771.358155677] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314771.358332610] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314771.358514896] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314771.358746511] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314771.359134689] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 4
-[sm-8] [INFO] [1782314771.359461616] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314771.359895698] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.324, -2.502, 0.700)
-[sm-8] [INFO] [1782314771.360193252] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314771.361145783] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [WARN] [1782314776.373635089] [hri]: [action_state.py:execute:205] Timeout reached while waiting for response from action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314776.373930140] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'timeout' --> 'SLEEP'
-[sm-8] [INFO] [1782314776.374285817] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314778.376123855] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314778.376390700] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314778.634817724] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314778.636326694] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314778.680621915] [hri]: [detect_3d.py:response_handler:119] Got 4 detections
-[sm-8] [INFO] [1782314778.680969918] [hri]: [detect_3d.py:response_handler:121] person at (0.62, -2.71, 0.57)
-[sm-8] [INFO] [1782314778.681259196] [hri]: [detect_3d.py:response_handler:121] person at (0.12, -2.52, 0.67)
-[sm-8] [INFO] [1782314778.681547322] [hri]: [detect_3d.py:response_handler:121] chair at (-1.14, -3.07, 0.10)
-[sm-8] [INFO] [1782314778.681847378] [hri]: [detect_3d.py:response_handler:121] chair at (-0.03, -1.79, 0.47)
-[sm-8] [INFO] [1782314778.682183879] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314778.714276438] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.6154921185260351, y:-2.7074095212928344, z:0.570150122446445
-[sm-8] [INFO] [1782314778.714707777] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.12489200344368745, y:-2.519219707714123, z:0.674373636622188
-[sm-8] [INFO] [1782314778.715106707] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-1.1397049410986115, y:-3.071779997329116, z:0.10353092054997104
-[sm-8] [INFO] [1782314778.715443454] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.030496223431798697, y:-1.7942899646074606, z:0.4664364655376454
-[sm-8] [INFO] [1782314778.716002905] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314778.716215251] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314778.716446460] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314778.716856704] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314778.717127168] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314778.717384662] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314778.717699786] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314778.742531623] [hri]: Detected objects:
-[sm-8] [INFO] [1782314778.742851493] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314778.743044649] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314778.743234665] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314778.743527782] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314778.743929970] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 5
-[sm-8] [INFO] [1782314778.744257653] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314778.744713962] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.403, -2.608, 0.700)
-[sm-8] [INFO] [1782314778.745006155] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314778.745817018] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314778.765229632] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314778.771164477] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314780.773769682] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314780.774239420] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314781.040671037] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314781.041406519] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314781.076464232] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314781.076837611] [hri]: [detect_3d.py:response_handler:121] person at (0.61, -2.71, 0.57)
-[sm-8] [INFO] [1782314781.077203559] [hri]: [detect_3d.py:response_handler:121] person at (0.14, -2.50, 0.67)
-[sm-8] [INFO] [1782314781.077523787] [hri]: [detect_3d.py:response_handler:121] chair at (0.00, -1.85, 0.46)
-[sm-8] [INFO] [1782314781.077826645] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314781.110522608] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.613086385463015, y:-2.7058319701658022, z:0.5742179920180621
-[sm-8] [INFO] [1782314781.111007884] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.1384372099528045, y:-2.4998267608364553, z:0.672177747037668
-[sm-8] [INFO] [1782314781.111400112] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:0.004740497414783329, y:-1.8521691891653527, z:0.45767899498772413
-[sm-8] [INFO] [1782314781.112006291] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314781.112225858] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314781.112461277] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314781.113010709] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314781.113281747] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314781.113547462] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314781.113826648] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314781.113990333] [hri]: Detected objects:
-[sm-8] [INFO] [1782314781.114194869] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314781.114362632] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314781.114526256] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314781.114752294] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314781.115086638] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 6
-[sm-8] [INFO] [1782314781.133931076] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314781.141764450] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.638, -2.903, 0.700)
-[sm-8] [INFO] [1782314781.142319952] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314781.143379467] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314781.166454760] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314781.166893769] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314783.171019646] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314783.171341809] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314783.427896684] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314783.430185636] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314783.472125494] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314783.475979112] [hri]: [detect_3d.py:response_handler:121] person at (0.62, -2.69, 0.60)
-[sm-8] [INFO] [1782314783.476320938] [hri]: [detect_3d.py:response_handler:121] person at (0.14, -2.52, 0.76)
-[sm-8] [INFO] [1782314783.476650089] [hri]: [detect_3d.py:response_handler:121] chair at (nan, nan, nan)
-[sm-8] [INFO] [1782314783.477029273] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314783.509660310] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.6178677246649334, y:-2.6885216642505894, z:0.598656074039917
-[sm-8] [INFO] [1782314783.510200710] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.13719134128552213, y:-2.5214008748742227, z:0.7612709664201134
-[sm-8] [INFO] [1782314783.510820233] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314783.511076588] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314783.511356947] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314783.521493637] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314783.535540506] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314783.535894587] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314783.536103238] [hri]: Detected objects:
-[sm-8] [INFO] [1782314783.536348325] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314783.536541212] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314783.536745792] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314783.537205068] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314783.538906815] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 7
-[sm-8] [INFO] [1782314783.539722782] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314783.540318096] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(-0.466, -1.859, 0.700)
-[sm-8] [INFO] [1782314783.540747678] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314783.541699157] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314783.565145328] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314783.566193362] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314785.568691360] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314785.569128191] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314785.825856199] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314785.826579204] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314785.867952381] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314785.868300222] [hri]: [detect_3d.py:response_handler:121] person at (0.06, -2.51, 0.63)
-[sm-8] [INFO] [1782314785.868583337] [hri]: [detect_3d.py:response_handler:121] chair at (-0.23, -1.73, 0.45)
-[sm-8] [INFO] [1782314785.868862042] [hri]: [detect_3d.py:response_handler:121] chair at (nan, nan, nan)
-[sm-8] [INFO] [1782314785.869147164] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314785.899724381] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.0626246430328059, y:-2.511395637266447, z:0.6250686060050291
-[sm-8] [INFO] [1782314785.900311201] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.2270418285246243, y:-1.7320761324164469, z:0.4506950292752745
-[sm-8] [INFO] [1782314785.900930351] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314785.901163113] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314785.901435142] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314785.901853330] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314785.902140562] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314785.902474470] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314785.902663092] [hri]: Detected objects:
-[sm-8] [INFO] [1782314785.902914734] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314785.903108009] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314785.903317016] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314785.903577805] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314785.904000202] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 8
-[sm-8] [INFO] [1782314785.904381942] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314785.904876999] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(-0.702, -2.606, 0.700)
-[sm-8] [INFO] [1782314785.905204232] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314785.906124971] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [WARN] [1782314790.923764433] [hri]: [action_state.py:execute:205] Timeout reached while waiting for response from action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314790.925109501] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'timeout' --> 'SLEEP'
-[sm-8] [INFO] [1782314790.925582646] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314792.927481059] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314792.944213342] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314793.215224600] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314793.216011119] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314793.253657638] [hri]: [detect_3d.py:response_handler:119] Got 4 detections
-[sm-8] [INFO] [1782314793.253983681] [hri]: [detect_3d.py:response_handler:121] person at (0.39, -2.89, 0.60)
-[sm-8] [INFO] [1782314793.254278820] [hri]: [detect_3d.py:response_handler:121] person at (0.07, -2.63, 0.67)
-[sm-8] [INFO] [1782314793.254568160] [hri]: [detect_3d.py:response_handler:121] chair at (-0.24, -1.70, 0.47)
-[sm-8] [INFO] [1782314793.254840642] [hri]: [detect_3d.py:response_handler:121] chair at (-0.31, -1.66, 0.61)
-[sm-8] [INFO] [1782314793.255154514] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314793.290264151] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.3931153614770337, y:-2.891063418791336, z:0.6017311674355308
-[sm-8] [INFO] [1782314793.290850688] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.06556227126836045, y:-2.6333078258916047, z:0.6730924485732879
-[sm-8] [INFO] [1782314793.291630405] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.23787177396038062, y:-1.6994283999174096, z:0.4689823660994773
-[sm-8] [INFO] [1782314793.291988738] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.3050189773000358, y:-1.6629102222450536, z:0.6132031503319433
-[sm-8] [INFO] [1782314793.292589426] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314793.292840543] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314793.293062968] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314793.293483285] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314793.293767330] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314793.294039296] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314793.294288539] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314793.294575097] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314793.294752968] [hri]: Detected objects:
-[sm-8] [INFO] [1782314793.294985600] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314793.295183662] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314793.295360717] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314793.295629859] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314793.296013284] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 9
-[sm-8] [INFO] [1782314793.296356364] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'continue' --> 'LOOK_POINT'
-[sm-8] [INFO] [1782314793.315225778] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(-0.570, -2.050, 0.700)
-[sm-8] [INFO] [1782314793.318284279] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314793.319829393] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314793.326635564] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_POINT' : 'aborted' --> 'SLEEP'
-[sm-8] [INFO] [1782314793.327054418] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314795.345141100] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SLEEP' : 'succeeded' --> 'DETECT_OBJECTS'
-[sm-8] [INFO] [1782314795.351401827] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'DETECT_OBJECTS_3D'
-[sm-8] [INFO] [1782314795.612906534] [hri]: [service_state.py:execute:138] Waiting for service '/yolo/detect3d'
-[sm-8] [INFO] [1782314795.613619560] [hri]: [service_state.py:execute:153] Sending request to service '/yolo/detect3d'
-[sm-8] [INFO] [1782314795.650269398] [hri]: [detect_3d.py:response_handler:119] Got 3 detections
-[sm-8] [INFO] [1782314795.650825227] [hri]: [detect_3d.py:response_handler:121] chair at (-0.23, -1.72, 0.45)
-[sm-8] [INFO] [1782314795.651232380] [hri]: [detect_3d.py:response_handler:121] person at (0.07, -2.59, 0.66)
-[sm-8] [INFO] [1782314795.651588667] [hri]: [detect_3d.py:response_handler:121] chair at (-1.41, -2.96, 0.64)
-[sm-8] [INFO] [1782314795.651951524] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS_3D' : 'succeeded' --> 'FILTER_DETECTIONS'
-[sm-8] [INFO] [1782314795.686126783] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-0.228313572839151, y:-1.7241017624719208, z:0.45217512883602984
-[sm-8] [INFO] [1782314795.686583720] [hri]: [detect_3d_in_area.py:execute:85] Detected a person at x:0.06509594183150047, y:-2.5906925798583904, z:0.6609030476436922
-[sm-8] [INFO] [1782314795.686946117] [hri]: [detect_3d_in_area.py:execute:85] Detected a chair at x:-1.4068475813333872, y:-2.9558192009463053, z:0.6431754986523208
-[sm-8] [INFO] [1782314795.687497791] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'FILTER_DETECTIONS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314795.687727649] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314795.687986225] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_OBJECTS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [INFO] [1782314795.688381841] [hri]: Detected object chair is too close to existing object chair. Not counting as new.
-[sm-8] [INFO] [1782314795.688652670] [hri]: Detected object person is too close to existing object person. Not counting as new.
-[sm-8] [INFO] [1782314795.689008757] [hri]: Processed detections. Total detected objects: 3
-[sm-8] [INFO] [1782314795.689202812] [hri]: Detected objects:
-[sm-8] [INFO] [1782314795.689443174] [hri]: - person at (0.6193406740954449, -2.730382238197708, 0.5803075375904453)
-[sm-8] [INFO] [1782314795.689640137] [hri]: - chair at (-0.2352875350233149, -1.6654367004297261, 0.49727366850470844)
-[sm-8] [INFO] [1782314795.689860263] [hri]: - person at (0.2029386573330394, -2.301679510603871, 0.5039309202759044)
-[sm-8] [INFO] [1782314795.690145392] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'GET_LOOK_POINT'
-[sm-8] [INFO] [1782314795.690579120] [hri]: [detect_all_in_polygon.py:_get_look_point:448] 10
-[sm-8] [INFO] [1782314795.690967112] [hri]: [detect_all_in_polygon.py:_get_look_point:454] Finished iterating through sweep points.
-[sm-8] [INFO] [1782314795.691229916] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_LOOK_POINT' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314795.691485085] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314795.691746932] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AND_DETECT' : 'succeeded' --> 'PUBLISH_DETECTED_OBJECTS'
-[sm-8] [INFO] [1782314795.692156989] [hri]: Processing 3 detections for debug image.
-[sm-8] [INFO] [1782314795.714377021] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.714605530] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.714805648] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.714988432] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.715182591] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.715374042] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.715562939] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.715769613] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.716002448] [hri]: Processing 0 detections for debug image.
-[sm-8] [INFO] [1782314795.716380004] [hri]: Created debug image with detections.
-[sm-8] [INFO] [1782314795.815303384] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PUBLISH_DETECTED_OBJECTS' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314795.816057038] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314795.817282642] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'DETECT_ALL_PEOPLE_SEATS' : 'succeeded' --> 'PROCESS_DETECTIONS'
-[sm-8] [WARN] [1782314795.822117756] [hri]: [seat_guest.py:execute:77] Finding seat in seat guest
-[sm-8] [INFO] [1782314795.824273361] [hri]: [seat_guest.py:execute:103] Detected this many people in sweep: 2
-[sm-8] [INFO] [1782314795.824700973] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'PROCESS_DETECTIONS' : 'succeeded' --> 'LOOK_TO_SEAT'
-[sm-8] [INFO] [1782314795.825263731] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.311, -2.717, 0.500)
-[sm-8] [INFO] [1782314795.825648506] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314795.845352551] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314796.915569098] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_TO_SEAT' : 'succeeded' --> 'SAY_SEAT_GUEST'
-[sm-8] [INFO] [1782314796.918817133] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314796.920035007] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314805.203267156] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_SEAT_GUEST' : 'succeeded' --> 'WAIT_FOR_GUEST_TO_SEAT'
-[sm-8] [INFO] [1782314805.210866423] [hri]: [wait.py:execute:21] Waiting for 5.0 seconds.
-[sm-8] [INFO] [1782314810.221334628] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT_FOR_GUEST_TO_SEAT' : 'succeeded' --> 'RESET_HEAD_2'
-[sm-8] [INFO] [1782314810.222965944] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314810.226574301] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314810.227945074] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314811.752656615] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314811.753089492] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_2' : 'succeeded' --> 'succeeded'
-[sm-8] [INFO] [1782314811.753446245] [hri]: [state_machine.cpp:execute:496] State machine ends with outcome 'succeeded'
-[sm-8] [INFO] [1782314811.753760312] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SEAT_GUEST_2' : 'succeeded' --> 'CHECK'
-[sm-8] [INFO] [1782314811.754211480] [hri]: [state_machine.py:check:166] 2
-[sm-8] [INFO] [1782314811.754646459] [hri]: [state_machine.py:check:170] Guest1:
-[sm-8] [INFO] [1782314811.755034637] [hri]: [state_machine.py:check:173] name: Jeff
-[sm-8] [INFO] [1782314811.755448209] [hri]: [state_machine.py:check:173] drink: vodka
-[sm-8] [INFO] [1782314811.755846929] [hri]: [state_machine.py:check:173] detection: True
-[sm-8] [INFO] [1782314811.756205955] [hri]: [state_machine.py:check:173] seating_detection: False
-[sm-8] [INFO] [1782314811.756579195] [hri]: [state_machine.py:check:173] attributes: {'hair_color': 'black', 'hair_length': 'shoulderlength', 'glasses': True, 'hat': True, 'shirt_color': 'black'}
-[sm-8] [INFO] [1782314811.757047526] [hri]: [state_machine.py:check:173] seated_point: None
-[sm-8] [INFO] [1782314811.757431009] [hri]: [state_machine.py:check:174] Guest2:
-[sm-8] [INFO] [1782314811.757742607] [hri]: [state_machine.py:check:177] name: Fadi
-[sm-8] [INFO] [1782314811.758017818] [hri]: [state_machine.py:check:177] drink: peach iced tea
-[sm-8] [INFO] [1782314811.758280164] [hri]: [state_machine.py:check:177] detection: True
-[sm-8] [INFO] [1782314811.758554015] [hri]: [state_machine.py:check:177] seating_detection: False
-[sm-8] [INFO] [1782314811.758823626] [hri]: [state_machine.py:check:177] attributes: {'hair_color': 'brown', 'hair_length': 'short', 'glasses': True, 'hat': True, 'shirt_color': 'beige'}
-[sm-8] [INFO] [1782314811.759096066] [hri]: [state_machine.py:check:177] seated_point: None
-[sm-8] [INFO] [1782314811.759309304] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'CHECK' : 'succeeded' --> 'INTRODUCE'
-[sm-8] [INFO] [1782314811.759552911] [hri]: [state_machine.cpp:execute:423] Executing state machine with initial state 'RESET_SEATING_DETECTIONS'
-[sm-8] [INFO] [1782314811.759931761] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_SEATING_DETECTIONS' : 'succeeded' --> 'LOOP_PERSON_STATE'
-[sm-8] [INFO] [1782314811.760350544] [hri]: [introduce.py:_loop_person_index:246] 0
-[sm-8] [INFO] [1782314811.760614613] [hri]: [introduce.py:_loop_person_index:247] Guest1 point: None
-[sm-8] [INFO] [1782314811.760906967] [hri]: [introduce.py:_loop_person_index:248] Guest2 point: None
-[sm-8] [INFO] [1782314811.761194386] [hri]: [introduce.py:_loop_person_index:249] Host point: None
-[sm-8] [INFO] [1782314811.761455390] [hri]: [introduce.py:_loop_person_index:250] Total detections (seats + people): 2
-[sm-8] [INFO] [1782314811.761785918] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOP_PERSON_STATE' : 'continue' --> 'LOOK_AT_PERSON'
-[sm-8] [INFO] [1782314811.762272251] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.619, -2.730, 0.580)
-[sm-8] [INFO] [1782314811.762566630] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314811.763423612] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314812.826455138] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AT_PERSON' : 'succeeded' --> 'WAIT'
-[sm-8] [INFO] [1782314812.826866070] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314814.829400736] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT' : 'succeeded' --> 'RECOGNISE'
-[sm-8] [INFO] [1782314814.830040009] [hri]: [recognise.py:_create_request:83] Waiting for synced rgb and depth frames
-[sm-8] [INFO] [1782314815.846235480] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/recognise'
-[sm-8] [INFO] [1782314815.846919234] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/recognise'
-[service-3] 2026-06-24 16:26:57.366904: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 438.19MiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[service-3] 2026-06-24 16:26:57.366950: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 408.19MiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[service-3] 2026-06-24 16:26:57.366968: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 408.19MiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[service-3] 2026-06-24 16:26:57.366983: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 408.19MiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[service-3] 2026-06-24 16:26:57.366998: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 408.19MiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[service-3] 2026-06-24 16:26:57.367013: W external/local_tsl/tsl/framework/bfc_allocator.cc:296] Allocator (GPU_0_bfc) ran out of memory trying to allocate 408.19MiB with freed_by_count=0. The caller indicates that this is not a failure, but this may mean that there could be performance gains if more memory were available.
-[sm-8] [INFO] [1782314817.456993939] [hri]: [recognise.py:_handle_resp:106] guest1
-[sm-8] [INFO] [1782314817.457463120] [hri]: [recognise.py:_handle_resp:107] geometry_msgs.msg.Point(x=0.1272925716897485, y=-2.5621232127688796, z=1.100714093020688)
-[sm-8] [INFO] [1782314817.458102305] [hri]: [recognise.py:_handle_resp:106] host
-[sm-8] [INFO] [1782314817.458470289] [hri]: [recognise.py:_handle_resp:107] geometry_msgs.msg.Point(x=0.5652780457356624, y=-2.821163961564225, z=1.1150141099009405)
-[sm-8] [INFO] [1782314817.458907386] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RECOGNISE' : 'succeeded' --> 'RESET_HEAD_1'
-[sm-8] [INFO] [1782314817.459218082] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314817.459562133] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314817.465074064] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314818.984768854] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314818.985108770] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_1' : 'succeeded' --> 'LOOP_PERSON_STATE'
-[sm-8] [INFO] [1782314818.985650518] [hri]: [introduce.py:_loop_person_index:246] 1
-[sm-8] [INFO] [1782314818.985933057] [hri]: [introduce.py:_loop_person_index:247] Guest1 point: geometry_msgs.msg.Point(x=0.1272925716897485, y=-2.5621232127688796, z=1.100714093020688)
-[sm-8] [INFO] [1782314818.986209898] [hri]: [introduce.py:_loop_person_index:248] Guest2 point: None
-[sm-8] [INFO] [1782314818.986479431] [hri]: [introduce.py:_loop_person_index:249] Host point: geometry_msgs.msg.Point(x=0.5652780457356624, y=-2.821163961564225, z=1.1150141099009405)
-[sm-8] [INFO] [1782314818.986801878] [hri]: [introduce.py:_loop_person_index:250] Total detections (seats + people): 2
-[sm-8] [INFO] [1782314818.987099860] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOP_PERSON_STATE' : 'continue' --> 'LOOK_AT_PERSON'
-[sm-8] [INFO] [1782314818.987515495] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.203, -2.302, 0.504)
-[sm-8] [INFO] [1782314818.987800746] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314818.988572788] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314820.043969494] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AT_PERSON' : 'succeeded' --> 'WAIT'
-[sm-8] [INFO] [1782314820.044335843] [hri]: [wait.py:execute:21] Waiting for 2 seconds.
-[sm-8] [INFO] [1782314822.046152912] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'WAIT' : 'succeeded' --> 'RECOGNISE'
-[sm-8] [INFO] [1782314822.046750799] [hri]: [recognise.py:_create_request:83] Waiting for synced rgb and depth frames
-[sm-8] [INFO] [1782314823.048677356] [hri]: [service_state.py:execute:138] Waiting for service '/lasr_vision_reid/recognise'
-[sm-8] [INFO] [1782314823.049754424] [hri]: [service_state.py:execute:153] Sending request to service '/lasr_vision_reid/recognise'
-[sm-8] [INFO] [1782314823.307802867] [hri]: [recognise.py:_handle_resp:106] guest1
-[sm-8] [INFO] [1782314823.308149696] [hri]: [recognise.py:_handle_resp:107] geometry_msgs.msg.Point(x=0.09661599787381481, y=-2.63956179785073, z=1.0824569285559633)
-[sm-8] [INFO] [1782314823.308548589] [hri]: [recognise.py:_handle_resp:106] host
-[sm-8] [INFO] [1782314823.308824309] [hri]: [recognise.py:_handle_resp:107] geometry_msgs.msg.Point(x=0.5603743875304602, y=-2.872620242063255, z=1.1067359963905194)
-[sm-8] [INFO] [1782314823.309108790] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RECOGNISE' : 'succeeded' --> 'RESET_HEAD_1'
-[sm-8] [INFO] [1782314823.309316405] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314823.309572743] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314823.310370758] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314824.832361330] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314824.832667206] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_1' : 'succeeded' --> 'LOOP_PERSON_STATE'
-[sm-8] [INFO] [1782314824.833239733] [hri]: [introduce.py:_loop_person_index:246] 2
-[sm-8] [INFO] [1782314824.833561986] [hri]: [introduce.py:_loop_person_index:247] Guest1 point: geometry_msgs.msg.Point(x=0.09661599787381481, y=-2.63956179785073, z=1.0824569285559633)
-[sm-8] [INFO] [1782314824.833847580] [hri]: [introduce.py:_loop_person_index:248] Guest2 point: None
-[sm-8] [INFO] [1782314824.834160109] [hri]: [introduce.py:_loop_person_index:249] Host point: geometry_msgs.msg.Point(x=0.5603743875304602, y=-2.872620242063255, z=1.1067359963905194)
-[sm-8] [INFO] [1782314824.834540077] [hri]: [introduce.py:_loop_person_index:250] Total detections (seats + people): 2
-[sm-8] [INFO] [1782314824.834970769] [hri]: [introduce.py:_loop_person_index:285] Fallback Guest2 point: geometry_msgs.msg.Point(x=0.2029386573330394, y=-2.301679510603871, z=0.5039309202759044)
-[sm-8] [INFO] [1782314824.835177788] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOP_PERSON_STATE' : 'succeeded' --> 'GRAB_GUEST_POINT'
-[sm-8] [INFO] [1782314824.835605926] [hri]: [introduce.py:_loop_guest:315] guest1
-[sm-8] [INFO] [1782314824.835884224] [hri]: [introduce.py:_loop_guest:316] geometry_msgs.msg.Point(x=0.09661599787381481, y=-2.63956179785073, z=1.0824569285559633)
-[sm-8] [INFO] [1782314824.836196590] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GRAB_GUEST_POINT' : 'continue' --> 'GET_INTRODUCTION_STR'
-[sm-8] [INFO] [1782314824.836500258] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_INTRODUCTION_STR' : 'succeeded' --> 'LOOK_AT_GUEST'
-[sm-8] [INFO] [1782314824.836929432] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.097, -2.640, 1.082)
-[sm-8] [INFO] [1782314824.837212267] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314824.837944084] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314825.901930326] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AT_GUEST' : 'succeeded' --> 'SAY_INTRODUCTION'
-[sm-8] [INFO] [1782314825.902350348] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314825.903237617] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314831.601909062] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_INTRODUCTION' : 'succeeded' --> 'RESET_HEAD_2'
-[sm-8] [INFO] [1782314831.602251249] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314831.602596941] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314831.603457958] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314833.125915847] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314833.126210809] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_2' : 'succeeded' --> 'GRAB_GUEST_POINT'
-[sm-8] [INFO] [1782314833.126782161] [hri]: [introduce.py:_loop_guest:315] guest2
-[sm-8] [INFO] [1782314833.127084861] [hri]: [introduce.py:_loop_guest:316] geometry_msgs.msg.Point(x=0.2029386573330394, y=-2.301679510603871, z=0.5039309202759044)
-[sm-8] [INFO] [1782314833.127421060] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GRAB_GUEST_POINT' : 'continue' --> 'GET_INTRODUCTION_STR'
-[sm-8] [INFO] [1782314833.127738527] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_INTRODUCTION_STR' : 'succeeded' --> 'LOOK_AT_GUEST'
-[sm-8] [INFO] [1782314833.128158832] [hri]: [look_to_point.py:_create_goal:45] Sending PointHead goal: frame=map, point=(0.203, -2.302, 0.504)
-[sm-8] [INFO] [1782314833.128451646] [hri]: [action_state.py:execute:165] Waiting for action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314833.129326926] [hri]: [action_state.py:execute:189] Sending goal to action '/head_controller/point_head_action'
-[sm-8] [INFO] [1782314834.184083405] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'LOOK_AT_GUEST' : 'succeeded' --> 'SAY_INTRODUCTION'
-[sm-8] [INFO] [1782314834.188780704] [hri]: [action_state.py:execute:165] Waiting for action '/tts_engine/tts'
-[sm-8] [INFO] [1782314834.189612552] [hri]: [action_state.py:execute:189] Sending goal to action '/tts_engine/tts'
-[sm-8] [INFO] [1782314839.412322579] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'SAY_INTRODUCTION' : 'succeeded' --> 'RESET_HEAD_2'
-[sm-8] [INFO] [1782314839.412615542] [hri]: GIVING GOAL of look_centre
-[sm-8] [INFO] [1782314839.412957319] [hri]: [action_state.py:execute:165] Waiting for action '/play_motion2'
-[sm-8] [INFO] [1782314839.413769028] [hri]: [action_state.py:execute:189] Sending goal to action '/play_motion2'
-[sm-8] [INFO] [1782314840.929708614] [hri]: Received result with response: play_motion2_msgs.action.PlayMotion2_Result(success=True, error='')
-[sm-8] [INFO] [1782314840.937091410] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'RESET_HEAD_2' : 'succeeded' --> 'GRAB_GUEST_POINT'
-[sm-8] [INFO] [1782314840.947805510] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GRAB_GUEST_POINT' : 'succeeded' --> 'GET_HOST'
-[sm-8] [INFO] [1782314840.948135132] [hri]: [state_machine.cpp:execute:488] State machine transitioning 'GET_HOST' : 'succeeded' --> 'LOOK_AT_HOST'
-[sm-8] Traceback (most recent call last):
-[sm-8] File "/home/rexy/fadi_ws/install/HRI/lib/HRI/sm-venv", line 33, in
-[sm-8] sys.exit(load_entry_point('HRI==0.0.0', 'console_scripts', 'sm')())
-[sm-8] File "/home/rexy/fadi_ws/install/HRI/lib/python3.10/site-packages/HRI/state_machine.py", line 263, in main
-[sm-8] outcome = sm(bb)
-[sm-8] File "/opt/robocup_ws/install/yasmin_ros/local/lib/python3.10/dist-packages/yasmin_ros/action_state.py", line 162, in execute
-[sm-8] goal = self._create_goal_handler(blackboard)
-[sm-8] File "/home/rexy/fadi_ws/install/skills/lib/python3.10/site-packages/lasr_skills/look_to_point.py", line 43, in _create_goal
-[sm-8] goal.target = target
-[sm-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/control_msgs/action/_point_head.py", line 163, in target
-[sm-8] assert \
-[sm-8] AssertionError: The 'target' field must be a sub message of type 'PointStamped'
-[sm-8] Exception in thread Thread-1 (spin):
-[sm-8] Exception in thread Thread-2 (spin):
-[sm-8] Traceback (most recent call last):
-[sm-8] Traceback (most recent call last):
-[sm-8] File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
-[sm-8] File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
-[sm-8] self.run()
-[sm-8] File "/usr/lib/python3.10/threading.py", line 953, in run
-[sm-8] self.run()
-[sm-8] File "/usr/lib/python3.10/threading.py", line 953, in run
-[sm-8] self._target(*self._args, **self._kwargs)
-[sm-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 323, in spin
-[sm-8] self._target(*self._args, **self._kwargs)
-[sm-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 323, in spin
-[sm-8] self.spin_once()
-[sm-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 863, in spin_once
-[sm-8] self.spin_once()
-[sm-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 863, in spin_once
-[sm-8] self._spin_once_impl(timeout_sec)
-[sm-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 855, in _spin_once_impl
-[sm-8] self._spin_once_impl(timeout_sec)
-[sm-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 855, in _spin_once_impl
-[sm-8] self._executor.submit(handler)
-[sm-8] File "/usr/lib/python3.10/concurrent/futures/thread.py", line 167, in submit
-[sm-8] self._executor.submit(handler)
-[sm-8] File "/usr/lib/python3.10/concurrent/futures/thread.py", line 167, in submit
-[sm-8] raise RuntimeError('cannot schedule new futures after shutdown')
-[sm-8] RuntimeError: cannot schedule new futures after shutdown
-[sm-8] raise RuntimeError('cannot schedule new futures after shutdown')
-[sm-8] RuntimeError: cannot schedule new futures after shutdown
-[sm-8] sys:1: RuntimeWarning: coroutine 'Executor._make_handler..handler' was never awaited
-[sm-8] RuntimeWarning: Enable tracemalloc to get the object allocation traceback
-[sm-8] Segmentation fault (core dumped)
-[ERROR] [sm-8]: process has died [pid 72290, exit code 139, cmd '/home/rexy/fadi_ws/install/HRI/lib/HRI/sm --ros-args -r __node:=hri --params-file /home/rexy/fadi_ws/install/HRI/share/HRI/config/lab.yaml'].
diff --git a/ros2.def b/ros2.def
index a9621d03b..78d7f9d7d 100644
--- a/ros2.def
+++ b/ros2.def
@@ -4,7 +4,7 @@
##
Bootstrap: localimage
-From: ./tiago_humble_os.sif
+From: /home/rexy/tiago_humble_os.sif
%post -c /bin/bash
export ROS_DISTRO=humble
@@ -12,7 +12,7 @@ export ROS_DISTRO=humble
# Install deps
apt update
export DEBIAN_FRONTEND=noninteractive
-apt upgrade -Y
+apt upgrade -y
apt install -y ros-${ROS_DISTRO}-example-interfaces
@@ -35,6 +35,8 @@ git clone https://github.com/Box-Robotics/ros2_numpy.git
cd /opt/robocup_ws/src
git clone https://github.com/uleroboticsgroup/yasmin.git
cd /opt/robocup_ws
+rosdep init || true
+rosdep update
rosdep install --from-paths src --ignore-src -r -y
cd /opt/robocup_ws/src
@@ -42,6 +44,13 @@ cd /opt/robocup_ws/src
apt install -y zstd
sh -c "$(curl -fsSL https://ollama.com/install.sh)"
+# rosbridge for tablet UI WebSocket communication
+apt install -y ros-${ROS_DISTRO}-rosbridge-suite
+
+# Node.js 18 for robot_ui Next.js frontend
+curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
+apt install -y nodejs
+
# Build robocup ws
source /opt/ros/$ROS_DISTRO/setup.bash
source /opt/pal/alum/setup.bash
@@ -51,6 +60,11 @@ colcon build
source install/setup.bash
echo "source /opt/robocup_ws/install/setup.bash" >> /opt/env.sh
+# Install and build the robot_ui Next.js frontend
+cd /opt/robocup_ws/install/robot_ui/share/robot_ui/robot-interface
+npm install
+npm run build
+
echo "echo 'I am in Robocup ROS2 Tiago container! (Built on $(date +'%d/%m/%Y %H:%M %Z'))'" >> /opt/env.sh
@@ -69,4 +83,4 @@ Usage:
Useful built-in commands:
- terminator - Starts a terminator instance from inside the container, so all splits will already have loaded the container.
-In order to load your own aliases, you can create a file called .tiagorc in $HOME (so in $HOME/.tiagorc) and this will be loaded when you load the container.
+In order to load your own aliases, you can create a file called .tiagorc in $HOME (so in $HOME/.tiagorc) and this will be loaded when you load the container.
\ No newline at end of file
diff --git a/skills/config/motions.yaml b/skills/config/motions.yaml
index 26f7d7b97..20931e363 100644
--- a/skills/config/motions.yaml
+++ b/skills/config/motions.yaml
@@ -25,7 +25,7 @@
times_from_start: [ 2.0 ]
post_navigation:
joints: [ torso_lift_joint, head_1_joint, head_2_joint ]
- positions: [ 0.25, 0.0, 0.0 ]
+ positions: [ 0.34, 0.0, 0.0 ]
times_from_start: [ 2.0 ]
look_left:
joints: [ head_1_joint, head_2_joint ]
diff --git a/skills/src/lasr_skills/ask_and_listen.py b/skills/src/lasr_skills/ask_and_listen.py
index ed9800fdc..baf03eea1 100644
--- a/skills/src/lasr_skills/ask_and_listen.py
+++ b/skills/src/lasr_skills/ask_and_listen.py
@@ -1,11 +1,28 @@
import yasmin
import rclpy
import yasmin_ros
+from yasmin import State
from lasr_skills import Listen
from lasr_skills import Say
from typing import Union
+RETRY_PHRASE_1 = "Sorry, I didn't catch that, could you please repeat?"
+RETRY_PHRASE_2 = (
+ "Sorry, I still couldn't hear you, could you please repeat more loudly?"
+)
+
+
+class CheckSpeechState(State):
+ def __init__(self):
+ super().__init__(outcomes=["succeeded", "empty"])
+
+ def execute(self, blackboard):
+ transcribed_speech = blackboard["transcribed_speech"]
+ if transcribed_speech and transcribed_speech.strip():
+ return "succeeded"
+ return "empty"
+
class AskAndListen(yasmin.StateMachine):
def __init__(
@@ -25,15 +42,8 @@ def __init__(
"canceled": "failed",
},
)
- self.add_state(
- "LISTEN",
- Listen(),
- transitions={
- "succeeded": "succeeded",
- "aborted": "failed",
- "canceled": "failed",
- },
- remappings={"sequence": "transcribed_speech"},
+ self._add_listen_with_retries(
+ hard_failure_outcome="canceled",
)
elif tts_phrase_format_str is not None:
self.add_input_key("tts_phrase_placeholders")
@@ -48,15 +58,8 @@ def __init__(
},
remappings={"placeholders": "tts_phrase_placeholders"},
)
- self.add_state(
- "LISTEN",
- Listen(),
- transitions={
- "succeeded": "succeeded",
- "aborted": "failed",
- "preempted": "failed",
- },
- remappings={"sequence": "transcribed_speech"},
+ self._add_listen_with_retries(
+ hard_failure_outcome="preempted",
)
else:
self.add_input_key("tts_phrase")
@@ -70,16 +73,58 @@ def __init__(
},
remapping={"text": "tts_phrase"},
)
- self.add(
- "LISTEN",
+ self._add_listen_with_retries(
+ hard_failure_outcome="preempted",
+ )
+
+ def _add_listen_with_retries(
+ self,
+ hard_failure_outcome: str,
+ ):
+ """
+ Adds a LISTEN state, plus 2 retries (3 attempts total), each of
+ which checks transcribed_speech for emptiness and asks the user to
+ repeat themselves, with an escalating phrase, if nothing was heard.
+
+ hard_failure_outcome: "canceled" or "preempted" outcomes from Say or Listen
+ """
+ retry_phrases = [RETRY_PHRASE_1, RETRY_PHRASE_2]
+ num_attempts = len(retry_phrases) + 1
+
+ for attempt in range(1, num_attempts + 1):
+ listen_name = "LISTEN" if attempt == 1 else f"LISTEN_RETRY_{attempt - 1}"
+ check_name = f"CHECK_SPEECH_{attempt}"
+ next_say = f"SAY_RETRY_{attempt}"
+ is_last = attempt == num_attempts
+
+ self.add_state(
+ listen_name,
Listen(),
+ transitions={
+ "succeeded": check_name,
+ "aborted": "failed" if is_last else next_say,
+ hard_failure_outcome: "failed",
+ },
+ **{"remappings": {"sequence": "transcribed_speech"}},
+ )
+ self.add_state(
+ check_name,
+ CheckSpeechState(),
transitions={
"succeeded": "succeeded",
- "aborted": "failed",
- "preempted": "failed",
+ "empty": "failed" if is_last else next_say,
},
- remapping={"sequence": "transcribed_speech"},
)
+ if not is_last:
+ self.add_state(
+ next_say,
+ Say(text=retry_phrases[attempt - 1]),
+ transitions={
+ "succeeded": f"LISTEN_RETRY_{attempt}",
+ "aborted": "failed",
+ hard_failure_outcome: "failed",
+ },
+ )
def main():
diff --git a/skills/src/lasr_skills/follow_person.py b/skills/src/lasr_skills/follow_person.py
index 1d7e6bd9f..1e442ea1f 100644
--- a/skills/src/lasr_skills/follow_person.py
+++ b/skills/src/lasr_skills/follow_person.py
@@ -420,7 +420,7 @@ def __init__(self):
)
self.add_state(
"DETECT_3D",
- Detect3DInArea(filter=["person"]),
+ Detect3DInArea(filter=["person"], z_min=-10, z_max=50),
transitions={
"succeeded": "GET_PERSON_POINT",
"failed": "failed",
diff --git a/skills/src/lasr_skills/go_to_location_with_play_motion.py b/skills/src/lasr_skills/go_to_location_with_play_motion.py
index 247aa3f74..2c88a0705 100644
--- a/skills/src/lasr_skills/go_to_location_with_play_motion.py
+++ b/skills/src/lasr_skills/go_to_location_with_play_motion.py
@@ -19,15 +19,15 @@ def __init__(self, location_pose=None, location_param=None):
PlayMotion("pre_navigation"),
transitions={
"succeeded": state_name,
- "aborted": "failed",
- "canceled": "failed",
+ "aborted": state_name,
+ "canceled": state_name,
},
)
self.add_state(
state_name,
GoToLocation(location_param=location_param.lower()),
- transitions={"succeeded": "POST_NAV", "failed": "failed"},
+ transitions={"succeeded": "POST_NAV", "failed": state_name},
)
self.add_state(
@@ -35,7 +35,7 @@ def __init__(self, location_pose=None, location_param=None):
PlayMotion("post_navigation"),
transitions={
"succeeded": "succeeded",
- "aborted": "failed",
- "canceled": "failed",
+ "aborted": "succeeded",
+ "canceled": "succeeded",
},
)
diff --git a/skills/src/lasr_skills/receive_object.py b/skills/src/lasr_skills/receive_object.py
index ce0b7fd24..ac117b7c9 100755
--- a/skills/src/lasr_skills/receive_object.py
+++ b/skills/src/lasr_skills/receive_object.py
@@ -56,9 +56,7 @@ def __init__(self, object_name: Union[str, None] = None, vertical: bool = True):
self.add_state(
"SAY_REACH_ARM",
- Say(
- text="I see you have a bag. Please step back, I am going to reach my arm out."
- ),
+ Say(text="I see you have a bag. I am going to reach my arm out."),
transitions={
"succeeded": "REACH_ARM",
"aborted": "REACH_ARM",
@@ -100,7 +98,7 @@ def __init__(self, object_name: Union[str, None] = None, vertical: bool = True):
self.add_state(
"SAY_PLACE",
Say(
- text=f"I am ready to recieve the {object_name} in my hand. I will wait for a few seconds.",
+ text=f"I am ready to recieve the {object_name} in my hand. Please place the bag on my gripper. I will wait for a few seconds.",
),
transitions={
"succeeded": "WAIT_5",
@@ -112,7 +110,7 @@ def __init__(self, object_name: Union[str, None] = None, vertical: bool = True):
self.add_state(
"SAY_PLACE",
Say(
- format_str="I am ready to recieve the {} in my hand. I will wait for a few seconds.",
+ format_str="I am ready to recieve the {} in my hand. I will wait for a few seconds. Please give me space to my left to put my arm away after.",
),
transitions={
"succeeded": "WAIT_5",
@@ -147,14 +145,32 @@ def __init__(self, object_name: Union[str, None] = None, vertical: bool = True):
# )
self.add_state(
"CLOSE_HALF_GRIPPER", # TEMPORARY REPLACEMENT
- PlayMotion(motion_name="close_half"),
+ PlayMotion(motion_name="close"),
transitions={
- "succeeded": "FOLD_ARM",
+ "succeeded": "WARN_ARM",
"aborted": "failed",
"canceled": "failed",
},
)
+ self.add_state(
+ "WARN_ARM",
+ Say(
+ text="I will put my arm away in 5 seconds. Please give me a lot of space to my left."
+ ),
+ transitions={
+ "succeeded": "WAIT_PUT_ARM_AWAY",
+ "aborted": "WAIT_PUT_ARM_AWAY",
+ "canceled": "WAIT_PUT_ARM_AWAY",
+ },
+ )
+
+ self.add_state(
+ "WAIT_PUT_ARM_AWAY",
+ Wait(5),
+ transitions={"succeeded": "FOLD_ARM", "failed": "FOLD_ARM"},
+ )
+
self.add_state(
"FOLD_ARM",
PlayMotion(motion_name="cml_arm_away"),
diff --git a/tasks/HRI/HRI/state_machine.py b/tasks/HRI/HRI/state_machine.py
index 095cadf18..58957cd31 100644
--- a/tasks/HRI/HRI/state_machine.py
+++ b/tasks/HRI/HRI/state_machine.py
@@ -7,8 +7,16 @@
import yasmin_ros
from geometry_msgs.msg import PointStamped
+from std_msgs.msg import String
-from lasr_skills import Say, SafeGoToLocation, StartDoorSM, Rotate, FollowPerson
+from lasr_skills import (
+ Say,
+ SafeGoToLocation,
+ StartDoorSM,
+ Rotate,
+ FollowPerson,
+ ReceiveObject,
+)
from HRI.states import *
@@ -31,10 +39,23 @@ def wait_cb(blackboard, msg):
yasmin.YASMIN_LOG_INFO("RECEIVED START SIGNAL")
return "succeeded"
+ def create_msg(blackboard):
+ return String(data="ready")
+
+ self.add_state(
+ "START_TABLET",
+ yasmin_ros.PublisherState(
+ msg_type=String,
+ topic_name="/tablet/screen",
+ create_message_handler=create_msg,
+ ),
+ transitions={"succeeded": "WAIT_START"},
+ )
+
self.add_state(
"WAIT_START", # Awaits start Signal for the task
yasmin_ros.MonitorState(
- topic_name="/hri/start",
+ topic_name="/tablet/ready",
outcomes=["succeeded", "failed"],
monitor_handler=wait_cb,
msg_type=Empty,
@@ -49,13 +70,17 @@ def wait_cb(blackboard, msg):
self.add_state(
"START_TIMER",
StartTimer(),
- transitions={"succeeded": "START_CON", "failed": "START_TIMER"},
+ transitions={"succeeded": "SAY_START", "failed": "START_TIMER"},
)
self.add_state(
- "START_CON", # SM1: Waits for Door to open, then goes to start
- self.setup(),
- transitions={"succeeded": "GO_TO_DOOR", "failed": "START_CON"},
+ "SAY_START", # SM1: Waits for Door to open, then goes to start
+ Say(text="Start of H R I task."),
+ transitions={
+ "succeeded": "GO_TO_DOOR",
+ "canceled": "failed",
+ "aborted": "failed",
+ },
)
self.add_state(
@@ -78,7 +103,7 @@ def wait_cb(blackboard, msg):
self.add_state(
"SEAT_GUEST", # SM3: Locates and seats guest in free seat
- SeatGuest(guest_id="guest1"),
+ SeatGuest(id="guest1"),
transitions={"succeeded": "CHECK", "failed": "failed"},
)
@@ -108,20 +133,36 @@ def wait_cb(blackboard, msg):
self.add_state(
"SEAT_GUEST_2", # SM3: Locates and seats guest in free seat
- SeatGuest(guest_id="guest2"),
+ SeatGuest(id="guest2"),
transitions={"succeeded": "CHECK", "failed": "failed"},
)
self.add_state(
"INTRODUCE",
Introduce(),
- transitions={"succeeded": "ROTATE", "failed": "ROTATE"},
+ transitions={"succeeded": "GRAB_BAG", "failed": "GRAB_BAG"},
+ )
+
+ self.add_state(
+ "GRAB_BAG",
+ ReceiveObject(object_name="bag"),
+ transitions={"succeeded": "ROTATE", "failed": "failed"},
)
self.add_state(
"ROTATE",
Rotate(angle=180),
- transitions={"succeeded": "FOLLOW_HOST", "failed": "failed"},
+ transitions={"succeeded": "ASK_FOR_HOST", "failed": "failed"},
+ )
+
+ self.add_state(
+ "ASK_FOR_HOST",
+ Say(text="Can the host please stand in front of me to lead the way."),
+ transitions={
+ "succeeded": "FOLLOW_HOST",
+ "aborted": "failed",
+ "canceled": "failed",
+ },
)
self.add_state(
@@ -137,18 +178,22 @@ def wait_cb(blackboard, msg):
"PLACE_BAG",
PlaceBag(),
transitions={
- "succeeded": "succeeded",
+ "succeeded": "STOP_TIMER",
"failed": "failed",
},
)
- self.add_state("STOP_TIMER", StopTimer(), transitions={"succeeded": "SAY_STOP"})
+ self.add_state(
+ "STOP_TIMER",
+ StopTimer(),
+ transitions={"succeeded": "SAY_STOP", "failed": "failed"},
+ )
self.add_state(
"SAY_STOP",
Say(),
transitions={
- "succeeded": "succeeded",
+ "succeeded": "SAY_END",
"aborted": "failed",
"canceled": "failed",
},
@@ -156,9 +201,13 @@ def wait_cb(blackboard, msg):
)
self.add_state(
- "INTRODUCE",
- Introduce(),
- transitions={"succeeded": "succeeded", "failed": "failed"},
+ "SAY_END",
+ Say(text="End of h r i task."),
+ transitions={
+ "succeeded": "succeeded",
+ "aborted": "failed",
+ "canceled": "failed",
+ },
)
def check(self, blackboard):
@@ -184,27 +233,6 @@ def check(self, blackboard):
self.guest_id += 1
return "continue" if self.guest_id == 2 else "succeeded"
- def setup(self):
- start_con_sm = yasmin.Concurrence(
- states={
- "SAY_START": Say(text="Start of H R I task."),
- "DOOR_START": StartDoorSM(),
- },
- default_outcome="failed",
- outcome_map={
- "succeeded": {
- "SAY_START": "succeeded",
- "DOOR_START": "succeeded",
- },
- "failed": {
- "SAY_START": "aborted",
- "DOOR_START": "failed",
- },
- },
- )
-
- return start_con_sm
-
class HRI_node(Node):
def __init__(self):
@@ -260,6 +288,11 @@ def main():
bb["drink_position"] = PointStamped()
bb["person_index"] = 0
+ bb["z_min"] = -10
+ bb["z_sweep_min"] = -10
+ bb["z_sweep_max"] = 50
+ bb["z_max"] = 50
+
outcome = sm(bb)
yasmin.YASMIN_LOG_INFO(f"State machine has ended with outcome {outcome}")
diff --git a/tasks/HRI/HRI/states/clearSeatingDetections.py b/tasks/HRI/HRI/states/clearSeatingDetections.py
index eb466fa9c..16702b6ce 100644
--- a/tasks/HRI/HRI/states/clearSeatingDetections.py
+++ b/tasks/HRI/HRI/states/clearSeatingDetections.py
@@ -12,6 +12,7 @@ def __init__(self):
super().__init__(outcomes=["succeeded", "failed"])
self.add_input_key("guest_data")
self.add_output_key("guest_data")
+ self.add_output_key("seat_indexes")
def execute(self, blackboard: Blackboard) -> str:
blackboard["seat_indexes"] = {"guest1": None, "guest2": None, "host": None}
diff --git a/tasks/HRI/HRI/states/get_name_and_drink.py b/tasks/HRI/HRI/states/get_name_and_drink.py
index 407f08949..68886e501 100755
--- a/tasks/HRI/HRI/states/get_name_and_drink.py
+++ b/tasks/HRI/HRI/states/get_name_and_drink.py
@@ -9,9 +9,12 @@
from typing import List, Dict, Any
from HRI.states import SpeechRecovery
from lasr_llm_interfaces.srv import HRITaskQueryLlm
+import rclpy
# from tasks.receptionist.src.receptionist.states import SpeechRecovery
+from lasr_skills import AskAndListen
+
class GetNameAndDrink(yasmin.StateMachine):
class ParseNameAndDrink(yasmin_ros.ServiceState):
@@ -40,6 +43,8 @@ def _create_req(self, blackboard):
def _handle_resp(self, blackboard, result):
result = result.response
+ if result.name == "" and result.favourite_drink == "":
+ return "aborted"
blackboard["guest_data"][self.guest_id][self.task] = (
result.name if self.task == "name" else result.favourite_drink
)
@@ -67,10 +72,17 @@ def execute(self, blackboard) -> str:
if not self._recovery_name_and_drink_required(blackboard):
if blackboard["guest_data"][self._guest_id]["name"] == "":
outcome = "failed_name"
+ blackboard["guest_data"][self._guest_id]["name"] = "John"
else:
+ blackboard["guest_data"][self._guest_id]["drink"] = "Coke"
outcome = "failed_drink"
else:
+ blackboard["guest_data"][self._guest_id]["name"] = "John"
+ blackboard["guest_data"][self._guest_id]["drink"] = "Coke"
outcome = "failed"
+
+ blackboard["placeholders"] = "John"
+ yasmin.YASMIN_LOG_INFO(str(blackboard["guest_data"]))
return outcome
def _recovery_name_and_drink_required(self, blackboard) -> bool:
@@ -90,9 +102,9 @@ def __init__(
guest_id: str,
last_resort: bool,
):
- super().__init__(
- outcomes=["succeeded", "failed", "failed_name", "failed_drink"]
- )
+ super().__init__(outcomes=["succeeded", "failed"])
+
+ self.flag = True
self.add_input_key("guest_transcription")
self.add_input_key("guest_data")
@@ -115,20 +127,82 @@ def __init__(
"aborted": "SPEECH_RECOVERY",
},
)
+ # self.add_state(
+ # "SPEECH_RECOVERY",
+ # SpeechRecovery(guest_id, last_resort),
+ # transitions={
+ # "succeeded": "succeeded",
+ # "failed": "POST_RECOVERY_DECISION",
+ # },
+ # )
+
self.add_state(
"SPEECH_RECOVERY",
- SpeechRecovery(guest_id, last_resort),
+ self.PostRecoveryDecision(guest_id=guest_id),
transitions={
- "succeeded": "succeeded",
- "failed": "POST_RECOVERY_DECISION",
+ "failed": "CHECK_REPEAT",
+ "failed_name": "CHECK_REPEAT",
+ "failed_drink": "CHECK_REPEAT",
},
)
+
+ self.add_state(
+ "CHECK_REPEAT",
+ yasmin.CbState(outcomes=["succeeded", "continue"], callback=self.check),
+ transitions={"succeeded": "succeeded", "continue": "REPEAT_ASK_GUEST"},
+ )
+
self.add_state(
- "POST_RECOVERY_DECISION",
- self.PostRecoveryDecision(guest_id=guest_id),
+ "REPEAT_ASK_GUEST",
+ AskAndListen(
+ tts_phrase="I am sorry, I did not understand. Please say 'Hi Tiago' for me to begin listening. What is your name and drink?",
+ ),
transitions={
+ "succeeded": "PARSE_NAME",
"failed": "failed",
- "failed_name": "failed_name",
- "failed_drink": "failed_drink",
},
+ remappings={"transcribed_speech": "guest_transcription"},
)
+
+ def check(self, blackboard):
+ if self.flag:
+ self.flag = False
+ return "continue"
+ else:
+ return "succeeded"
+
+
+def main():
+ rclpy.init()
+
+ yasmin_ros.set_ros_loggers()
+
+ sm = yasmin.StateMachine(outcomes=["succeeded", "failed"], handle_sigint=True)
+
+ sm.add_state(
+ "NAME_DRINK",
+ GetNameAndDrink(guest_id="guest1", last_resort=False),
+ transitions={
+ "succeeded": "succeeded",
+ "failed": "failed",
+ "failed_name": "failed",
+ "failed_drink": "failed",
+ },
+ )
+
+ bb = yasmin.Blackboard()
+ bb["guest_transcription"] = "John"
+ bb["guest_data"] = {
+ "guest1": {
+ "name": "",
+ "drink": "",
+ "detection": False,
+ "seating_detection": False,
+ "attributes": {},
+ "seated_point": None,
+ }
+ }
+
+ outcome = sm(bb)
+
+ rclpy.shutdown()
diff --git a/tasks/HRI/HRI/states/greet.py b/tasks/HRI/HRI/states/greet.py
index eddbb082a..b72f46192 100644
--- a/tasks/HRI/HRI/states/greet.py
+++ b/tasks/HRI/HRI/states/greet.py
@@ -8,6 +8,7 @@
ReceiveObject,
StopEyeTracker,
Wait,
+ SafeGoToLocation,
)
from HRI.states import (
GetNameAndDrink,
@@ -89,7 +90,7 @@ def __init__(self, last_resort, guest_id):
conc_face_attribute = yasmin.Concurrence(
states={
"GET_ATTRIBUTES": GetGuestAttributes(guest_id=guest_id),
- "LEARN_FACE": HRILearnFaces(guest_id=guest_id, dataset_size=10),
+ "LEARN_FACE": HRILearnFaces(guest_id=guest_id, dataset_size=5),
},
default_outcome="failed",
outcome_map={
@@ -125,9 +126,9 @@ def __init__(self, last_resort, guest_id):
"GET_NAME_DRINK": "succeeded",
"GET_FACE_ATTRIBUTES": "succeeded",
},
- "failed": {
+ "failed_speech": {
"GET_NAME_DRINK": "failed",
- "GET_FACE_ATTRIBUTES": "failed",
+ "GET_FACE_ATTRIBUTES": "succeeded",
},
"failed_vision": {
"GET_NAME_DRINK": "succeeded",
@@ -154,7 +155,7 @@ def __init__(self, last_resort, guest_id):
tts_phrase="Please say 'Hi Tiago' for me to begin listening. What is your name and drink?",
),
transitions={
- "succeeded": "GET_NAME_DRINK_FACE",
+ "succeeded": "SAY_WAIT",
"failed": "failed",
},
remappings={"transcribed_speech": "guest_transcription"},
@@ -162,6 +163,18 @@ def __init__(self, last_resort, guest_id):
transition = "GET_ATTRIBUTE_STR" if guest_id == "guest2" else "SAY_WELCOME"
+ self.add_state(
+ "SAY_WAIT",
+ Say(
+ text="Give me some time to learn your face and attributes. Please wait here."
+ ),
+ transitions={
+ "succeeded": "GET_NAME_DRINK_FACE",
+ "aborted": "failed",
+ "canceled": "failed",
+ },
+ )
+
self.add_state(
"GET_NAME_DRINK_FACE",
conc_name_drink_face,
@@ -169,6 +182,7 @@ def __init__(self, last_resort, guest_id):
"succeeded": transition,
"failed": "failed",
"failed_vision": "failed",
+ "failed_speech": transition,
"failed_face": "failed",
"failed_attributes": "failed",
},
@@ -213,21 +227,11 @@ def __init__(self, last_resort, guest_id):
"STOP_EYE_TRACKING_2",
StopEyeTracker(),
transitions={
- "succeeded": "WAIT",
+ "succeeded": "SAY_WELCOME_2",
"failed": "failed",
},
)
- self.add_state(
- "WAIT", Wait(2), transitions={"succeeded": "GRAB_BAG", "failed": "failed"}
- )
-
- self.add_state(
- "GRAB_BAG",
- ReceiveObject(object_name="bag"),
- transitions={"succeeded": "SAY_WELCOME_2", "failed": "failed"},
- )
-
self.add_state(
"SAY_WELCOME_2",
Say(text="Please follow me to be seated."),
@@ -255,9 +259,10 @@ def get_guest1_attributes(self, blackboard):
" are wearing glasses." if value else " are not wearing glasses."
)
elif attribute == "hat":
- attribute_str += (
- " are wearing a hat." if value else " are not wearing a hat."
- )
+ # attribute_str += (
+ # " are wearing a hat." if value else " are not wearing a hat."
+ # )
+ pass
elif attribute == "shirt_color":
attribute_str += f" are wearing a {value} coloured shirt."
else:
diff --git a/tasks/HRI/HRI/states/introduce.py b/tasks/HRI/HRI/states/introduce.py
index b0bf52663..ec5a0729f 100644
--- a/tasks/HRI/HRI/states/introduce.py
+++ b/tasks/HRI/HRI/states/introduce.py
@@ -9,11 +9,11 @@
import yasmin_ros
from shapely.geometry import Polygon as ShapelyPolygon
+import numpy as np
+
from lasr_skills import (
Say,
- DetectAllInPolygon,
- StartEyeTracker,
- StopEyeTracker,
+ Detect3DInArea,
PlayMotion,
Wait,
LookToPoint,
@@ -39,7 +39,6 @@ class Introduce(yasmin.StateMachine):
Blackboard keys required before calling sm():
- guest_data: Dict of all guests keyed by id
- - guest_seat_point: PointStamped of the incoming guest's seat
- seated_guest_locs: List of Point locations of all seated guests
- person_index: Set to 0 before calling sm()
"""
@@ -47,17 +46,16 @@ class Introduce(yasmin.StateMachine):
def __init__(self):
super().__init__(outcomes=["succeeded", "failed"])
self.add_input_key("guest_data")
- self.add_input_key("guest_seat_point")
- self.add_input_key("seated_guest_locs")
self._node = yasmin_ros.logger_node
+ self.flag = True
- self.seating_area = ShapelyPolygon(
+ self.sofa_area = ShapelyPolygon(
[
- self._node.get_parameter("seat_area.top_left").value,
- self._node.get_parameter("seat_area.top_right").value,
- self._node.get_parameter("seat_area.bottom_right").value,
- self._node.get_parameter("seat_area.bottom_left").value,
+ np.array(self._node.get_parameter("sofa_area.top_left").value),
+ np.array(self._node.get_parameter("sofa_area.top_right").value),
+ np.array(self._node.get_parameter("sofa_area.bottom_right").value),
+ np.array(self._node.get_parameter("sofa_area.bottom_left").value),
]
)
@@ -66,43 +64,52 @@ def __init__(self):
callback=self._loop_person_index,
)
loop_state.add_input_key("person_index")
- loop_state.add_input_key("people_det")
loop_state.add_input_key("guest_data")
+ loop_state.add_input_key("introduce_detections")
loop_state.add_output_key("person_index")
- loop_state.add_output_key("person_point")
+ loop_state.add_output_key("person_point_stamped")
guest_loop = yasmin.CbState(
outcomes=["succeeded", "continue"], callback=self._loop_guest
)
guest_loop.add_input_key("guest_data")
guest_loop.add_output_key("guest_data")
+ guest_loop.add_output_key("guest_point_stamped")
+ guest_loop.add_output_key("introduce_to")
+ guest_loop.add_output_key("relevant_guest_data")
- host_point = yasmin.CbState(
- outcomes=["succeeded", "failed"],
- callback=self._get_host,
+ fallback_loop = yasmin.CbState(
+ outcomes=["succeeded", "continue"], callback=self._loop_str
)
- host_point.add_input_key("guest_data")
- host_point.add_output_key("host_point")
+ fallback_loop.add_input_key("guest_data")
+ fallback_loop.add_output_key("introduce_to")
+ fallback_loop.add_output_key("relevant_guest_data")
self.add_state(
"RESET_SEATING_DETECTIONS",
ClearSeatingDetections(),
- transitions={"succeeded": "LOOP_PERSON_STATE", "failed": "failed"},
+ transitions={"succeeded": "DETECT_PEOPLE", "failed": "failed"},
)
- # self.add_state(
- # "FIND_PEOPLE",
- # DetectAllInPolygon(
- # polygon=self.seating_area,
- # object_filter=["person"],
- # min_coverage=0.7,
- # min_new_object_dist=0.50,
- # min_confidence=0.5,
- # ),
- # transitions={"succeeded": "LOOP_PERSON_STATE", "failed": "failed"},
- # remappings={"detected_objects": "people_detected"},
- # )
+ self.add_state(
+ "DETECT_PEOPLE",
+ Detect3DInArea(
+ area_polygon=self.sofa_area, filter=["person"], z_min=-10, z_max=10
+ ),
+ transitions={"succeeded": "SAY_LOOK_AT_ME", "failed": "failed"},
+ remappings={"detections_3d": "introduce_detections"},
+ )
+
+ self.add_state(
+ "SAY_LOOK_AT_ME",
+ Say(text="Please look at me, for the introduction."),
+ transitions={
+ "succeeded": "LOOP_PERSON_STATE",
+ "aborted": "LOOP_PERSON_STATE",
+ "canceled": "LOOP_PERSON_STATE",
+ },
+ )
self.add_state(
"LOOP_PERSON_STATE",
@@ -110,7 +117,7 @@ def __init__(self):
transitions={
"succeeded": "GRAB_GUEST_POINT",
"continue": "LOOK_AT_PERSON",
- "failed": "failed",
+ "failed": "FALLBACK_SPEECH",
},
)
@@ -135,7 +142,7 @@ def __init__(self):
Recognise(),
transitions={
"succeeded": "RESET_HEAD_1",
- "aborted": "failed",
+ "aborted": "RESET_HEAD_1",
"no_detections": "RESET_HEAD_1",
},
)
@@ -150,10 +157,32 @@ def __init__(self):
},
)
+ self.add_state(
+ "FALLBACK_SPEECH",
+ fallback_loop,
+ transitions={"succeeded": "succeeded", "continue": "GET_FALLBACK_STR"},
+ )
+
+ self.add_state(
+ "GET_FALLBACK_STR",
+ GetIntroductionStr(),
+ transitions={"succeeded": "SAY_FALLBACK", "failed": "failed"},
+ )
+
+ self.add_state(
+ "SAY_FALLBACK",
+ Say(),
+ transitions={
+ "succeeded": "FALLBACK_SPEECH",
+ "aborted": "FALLBACK_SPEECH",
+ "canceled": "FALLBACK_SPEECH",
+ },
+ )
+
self.add_state(
"GRAB_GUEST_POINT",
guest_loop,
- transitions={"succeeded": "GET_HOST", "continue": "GET_INTRODUCTION_STR"},
+ transitions={"succeeded": "succeeded", "continue": "GET_INTRODUCTION_STR"},
)
self.add_state(
@@ -194,101 +223,48 @@ def __init__(self):
},
)
- self.add_state(
- "GET_HOST",
- host_point,
- transitions={
- "succeeded": "LOOK_AT_HOST",
- "failed": "failed",
- },
- )
-
- self.add_state(
- "LOOK_AT_HOST",
- LookToPoint(),
- transitions={
- "succeeded": "SAY_INTRODUCTION",
- "aborted": "SAY_INTRODUCTION",
- "canceled": "failed",
- "timeout": "SAY_INTRODUCTION",
- },
- remappings={"pointstamped": "host_pointstamped"},
- )
-
- self.add_state(
- "SAY_HOST",
- Say(
- text="Hello host! I have a bag for you. Can you stand in front of me to lead the way."
- ),
- transitions={
- "succeeded": "succeeded",
- "aborted": "succeeded",
- "canceled": "succeeded",
- },
- )
-
def _loop_person_index(self, blackboard):
- guest1point = blackboard["guest_data"]["guest1"]["seated_point"]
- guest2point = blackboard["guest_data"]["guest2"]["seated_point"]
- host = blackboard["guest_data"]["host"]["seated_point"]
- people_det = len(blackboard["people_det"])
- index = blackboard["person_index"]
-
- indexes = [i for i in range(people_det)]
-
- yasmin.YASMIN_LOG_INFO(str(index))
- yasmin.YASMIN_LOG_INFO("Guest1 point: " + str(guest1point))
- yasmin.YASMIN_LOG_INFO("Guest2 point: " + str(guest2point))
- yasmin.YASMIN_LOG_INFO("Host point: " + str(host))
- yasmin.YASMIN_LOG_INFO("Total detections (seats + people): " + str(people_det))
-
- if guest1point is not None and guest2point is not None and host is not None:
- return "succeeded"
- elif index < people_det:
- point = blackboard["people_det"][index].point
- point_stamped = PointStamped(header=Header(frame_id="map"), point=point)
- blackboard["person_point_stamped"] = point_stamped
- index += 1
- blackboard["person_index"] = index
- return "continue"
- elif guest2point is not None and host is not None:
- index2 = blackboard["seat_indexes"]["guest2"]
- indexh = blackboard["seat_indexes"]["host"]
- for i in indexes:
- if i != index2 and i != indexh:
- index = i
- blackboard["guest_data"]["guest1"]["seated_point"] = blackboard[
- "people_det"
- ][index].point
- guest2point = blackboard["guest_data"]["guest1"]["seated_point"]
- yasmin.YASMIN_LOG_INFO("Fallback Guest1 point: " + str(guest2point))
- return "succeeded"
- elif guest1point is not None and host is not None:
- index2 = blackboard["seat_indexes"]["guest1"]
- indexh = blackboard["seat_indexes"]["host"]
- for i in indexes:
- if i != index2 and i != indexh:
- index = i
- blackboard["guest_data"]["guest2"]["seated_point"] = blackboard[
- "people_det"
- ][index].point
+ try:
+ guest1point = blackboard["guest_data"]["guest1"]["seated_point"]
guest2point = blackboard["guest_data"]["guest2"]["seated_point"]
- yasmin.YASMIN_LOG_INFO("Fallback Guest2 point: " + str(guest2point))
- return "succeeded"
+ people_det = len(blackboard["introduce_detections"])
+ index = blackboard["person_index"]
+
+ yasmin.YASMIN_LOG_INFO(str(index))
+ yasmin.YASMIN_LOG_INFO("Guest1 point: " + str(guest1point))
+ yasmin.YASMIN_LOG_INFO("Guest2 point: " + str(guest2point))
+ yasmin.YASMIN_LOG_INFO("Total people: " + str(people_det))
+
+ if guest1point is not None and guest2point is not None:
+ return "succeeded"
+ elif index < people_det:
+ point = blackboard["introduce_detections"][index].point
+ point_stamped = PointStamped(header=Header(frame_id="map"), point=point)
+ blackboard["person_point_stamped"] = point_stamped
+ index += 1
+ blackboard["person_index"] = index
+ return "continue"
- return "failed"
+ return "failed"
+ except Exception as e:
+ yasmin.YASMIN_LOG_INFO(f"An error has occured with loop_person_index: {e}")
+ return "failed"
- def _get_host(self, blackboard):
- if blackboard["guest_data"]["host"]["seated_point"]:
- poinstamped = PointStamped(
- header=Header(frame_id="map"),
- point=blackboard["guest_data"]["host"]["seated_point"],
- )
- blackboard["host_pointstamped"] = poinstamped
- return "succeeded"
+ def _loop_str(self, blackboard):
+ yasmin.YASMIN_LOG_INFO("Flag is: " + str(self.flag))
+ if self.flag and isinstance(self.flag, bool):
+ blackboard["introduce_to"] = blackboard["guest_data"]["guest1"]["name"]
+ blackboard["relevant_guest_data"] = blackboard["guest_data"]["guest2"]
+ self.flag = False
+ return "continue"
+ elif not self.flag and isinstance(self.flag, bool):
+ blackboard["introduce_to"] = blackboard["guest_data"]["guest2"]["name"]
+ blackboard["relevant_guest_data"] = blackboard["guest_data"]["guest1"]
+ self.flag = None
+ return "continue"
else:
- yasmin.YASMIN_LOG_INFO(f"No host")
- return "failed"
+ yasmin.YASMIN_LOG_INFO("Introduction finished")
+ return "succeeded"
def _loop_guest(self, blackboard):
if (
diff --git a/tasks/HRI/HRI/states/place_bag.py b/tasks/HRI/HRI/states/place_bag.py
index 1e06ed8b0..d50afff4e 100644
--- a/tasks/HRI/HRI/states/place_bag.py
+++ b/tasks/HRI/HRI/states/place_bag.py
@@ -338,17 +338,7 @@ def __init__(self):
self.add_state(
"PLACE_BAG_MOTION",
PlacingMotion(),
- transitions={"succeeded": "FINISH", "failed": "failed"},
- )
-
- self.add_state(
- "FINISH",
- Say(text="I have finished the task. "),
- transitions={
- "succeeded": "succeeded",
- "aborted": "failed",
- "canceled": "failed",
- },
+ transitions={"succeeded": "succeeded", "failed": "failed"},
)
diff --git a/tasks/HRI/HRI/states/recognise.py b/tasks/HRI/HRI/states/recognise.py
index 994f43f69..a86fa5527 100644
--- a/tasks/HRI/HRI/states/recognise.py
+++ b/tasks/HRI/HRI/states/recognise.py
@@ -30,7 +30,10 @@ def __init__(self):
outcomes=["no_detections"],
)
+ self.add_input_key("guest_data")
+ self.add_input_key("seat_indexes")
self.add_output_key("guest_data")
+ self.add_output_key("seat_indexes")
self.image_pub = self._node.create_publisher(Image, "recognise/image", 10)
diff --git a/tasks/HRI/HRI/states/seat_guest.py b/tasks/HRI/HRI/states/seat_guest.py
index 293bef5e0..c64fd5ece 100644
--- a/tasks/HRI/HRI/states/seat_guest.py
+++ b/tasks/HRI/HRI/states/seat_guest.py
@@ -26,6 +26,7 @@
LookToPoint,
Say,
Wait,
+ ReceiveObject,
DetectAllInPolygon,
StopEyeTracker,
)
@@ -44,25 +45,26 @@ class ProcessDetections(State):
def __init__(
self,
- sofa_point: Point,
+ left_sofa_point: ShapelyPoint,
+ right_sofa_point: ShapelyPoint,
+ middle_sofa_point: ShapelyPoint,
left_sofa_area: ShapelyPolygon,
+ middle_sofa_area: ShapelyPolygon,
right_sofa_area: ShapelyPolygon,
- max_people_on_sofa: int = 2,
):
super().__init__(outcomes=["succeeded", "failed"])
self._node = yasmin_ros.logger_node
- self.add_input_key("non_sofa_detections")
- self.add_input_key("sofa_detections")
+ self.add_input_key("people_detections")
- self.add_output_key("guest_seat_point")
- self.add_output_key("seated_guest_locs")
self.add_output_key("seating_string")
- self._max_people_on_sofa = max_people_on_sofa
- self._sofa_point = sofa_point
+ self.left_sofa_point = left_sofa_point
+ self.right_sofa_point = right_sofa_point
+ self.middle_sofa_point = middle_sofa_point
self._left_sofa_area = left_sofa_area
+ self._middle_sofa_area = middle_sofa_area
self._right_sofa_area = right_sofa_area
self._tf_buffer = tf.Buffer(cache_time=Duration(seconds=10.0))
self._tf_listener = tf.TransformListener(self._tf_buffer, self._node)
@@ -70,79 +72,66 @@ def __init__(
def execute(self, blackboard):
"""
Input:
- blackboard["non_sofa_detections"] (List[Detection3D]): List of detected objects that are not on the sofa
- blackboard["sofa_detections"] (List[Detection3D]): List of detected objects on the sofa
+ blackboard["people_detections"] (List[Detection3D]): List of detected people on the sofa
"""
- yasmin.YASMIN_LOG_WARN("Finding seat in seat guest")
left_sofa_occupied = False
+ middle_sofa_occupied = False
right_sofa_occupied = False
- unseated_sofa_persons = []
- non_sofa_chairs = {}
- people = []
-
- for detection in blackboard["seat_detections"]:
- detection_point = ShapelyPoint(
- detection.point.x, detection.point.y, detection.point.z
+ free_seat_point = None
+
+ for detection in blackboard["people_detections"]:
+ detection_point = ShapelyPoint(detection.point.x, detection.point.y)
+ if self._left_sofa_area.covers(detection_point):
+ left_sofa_occupied = True
+ elif self._middle_sofa_area.covers(detection_point):
+ middle_sofa_occupied = True
+ elif self._right_sofa_area.covers(detection_point):
+ right_sofa_occupied = True
+
+ blackboard["people_det"] = blackboard["people_detections"]
+
+ if (
+ not left_sofa_occupied
+ and not right_sofa_occupied
+ and not middle_sofa_occupied
+ ):
+ blackboard["seating_string"] = (
+ "The sofa that I'm looking at is empty. Please take a seat anywhere on the sofa."
)
- if detection.name == "person":
- people.append(detection)
- if self._left_sofa_area.contains(detection_point):
- left_sofa_occupied = True
- elif self._right_sofa_area.contains(detection_point):
- right_sofa_occupied = True
- else:
- unseated_sofa_persons.append(detection_point)
- elif (
- detection.name == "chair"
- and not self._right_sofa_area.contains(detection_point)
- and not self._left_sofa_area.contains(detection_point)
- ):
- non_sofa_chairs.update({detection_point: False})
-
- yasmin.YASMIN_LOG_INFO(
- "Detected this many people in sweep: " + str(len(people))
- )
-
- if len(people) == 1:
- blackboard["pointstamped"] = PointStamped(
- header=Header(frame_id="map"), point=people[0].point
+ elif (
+ not left_sofa_occupied and not right_sofa_occupied and middle_sofa_occupied
+ ):
+ blackboard["seating_string"] = (
+ "The sofa is currently occupied by one person. Please take a seat on the left side or on the right side of the sofa."
)
- else:
- blackboard["people_det"] = people
-
- for chair_detection in non_sofa_chairs.keys():
- for person_detection in unseated_sofa_persons:
- if chair_detection.distance(person_detection) < 0.2:
- non_sofa_chairs[chair_detection] = True # Chair is occupied
- break
-
- if left_sofa_occupied != right_sofa_occupied:
- seating_side = "left" if right_sofa_occupied else "right"
+ elif (
+ not left_sofa_occupied and not middle_sofa_occupied and right_sofa_occupied
+ ):
blackboard["seating_string"] = (
- "The sofa that I'm looking at is occupied by one person. "
- f"Please take a seat next to them on the {seating_side} side of the sofa."
+ "The sofa is currently occupied by one person. Please take a seat in the middle or on the left side of the sofa."
)
- blackboard["guest_seat_point"] = PointStamped(
- header=Header(frame_id="map"), point=self._sofa_point
+ elif (
+ not right_sofa_occupied and not middle_sofa_occupied and left_sofa_occupied
+ ):
+ blackboard["seating_string"] = (
+ "The sofa is currently occupied by one person. Please take a seat in the middle or on the right side of the sofa."
)
- elif left_sofa_occupied and right_sofa_occupied:
- for chair in non_sofa_chairs.keys():
- if not non_sofa_chairs[chair]:
- blackboard["seating_string"] = (
- "The sofa that I'm looking at is at full capacity. I have found an extra seat for you. Please sit down in the seat I am looking at."
- )
- blackboard["guest_seat_point"] = PointStamped(
- header=Header(frame_id="map"),
- point=Point(x=chair.x, y=chair.y, z=chair.z),
- )
- break
- else:
+ elif not left_sofa_occupied and right_sofa_occupied and middle_sofa_occupied:
blackboard["seating_string"] = (
- "The sofa that I'm looking at is empty. Please take a seat anywhere on the sofa."
+ "The sofa is currently occupied by two people. Please take a seat on the left side of the sofa."
)
- blackboard["guest_seat_point"] = PointStamped(
- header=Header(frame_id="map"), point=self._sofa_point
+ elif not right_sofa_occupied and left_sofa_occupied and middle_sofa_occupied:
+ blackboard["seating_string"] = (
+ "The sofa is currently occupied by two people. Please take a seat on the right side of the sofa."
+ )
+ elif not middle_sofa_occupied and left_sofa_occupied and right_sofa_occupied:
+ blackboard["seating_string"] = (
+ "The sofa is currently occupied by two people. Please take a seat in the middle of the sofa."
+ )
+ else:
+ blackboard["seating_string"] = (
+ "The sofa that I'm looking at appears to be full. Please take a seat in the free chair next to the sofa."
)
return "succeeded"
@@ -161,13 +150,11 @@ class SeatGuest(StateMachine):
learn_host (bool): Whether to perform the host-learning routine (default: False).
"""
- def __init__(
- self,
- guest_id: str,
- ):
+ def __init__(self, id):
super().__init__(outcomes=["succeeded", "failed"])
self.add_input_key("guest_data")
- self.add_output_key("guest_seat_point")
+ self.add_output_key("people_detections")
+ self.guest_id = id
self._node = yasmin_ros.logger_node
self.__load_ros_parameters()
@@ -186,76 +173,40 @@ def __init__(
"RESET_HEAD_1",
PlayMotion(motion_name="look_centre"),
transitions={
- "succeeded": "DETECT_ALL_PEOPLE_SEATS",
+ "succeeded": "DETECT_ALL_PEOPLE_SOFA",
"aborted": "failed",
"canceled": "failed",
},
)
self.add_state(
- "DETECT_ALL_PEOPLE_SEATS",
- DetectAllInPolygon(
- polygon=self.seating_area,
- object_filter=["person", "chair"],
- min_coverage=0.7,
- min_new_object_dist=0.50,
- min_confidence=0.5,
+ "DETECT_ALL_PEOPLE_SOFA",
+ Detect3DInArea(
+ area_polygon=self.sofa_area,
+ filter=["person"],
+ model="yolo11n-seg.pt",
+ z_min=-10,
+ z_max=50,
+ confidence=0.8,
+ target_frame="map",
),
transitions={"succeeded": "PROCESS_DETECTIONS", "failed": "failed"},
- remappings={"detected_objects": "seat_detections"},
+ remappings={"detections_3d": "people_detections"},
)
- transition = "LOOK_HOST" if guest_id == "guest1" else "LOOK_TO_SEAT"
-
self.add_state(
"PROCESS_DETECTIONS",
ProcessDetections(
- max_people_on_sofa=self.max_people_on_sofa,
- sofa_point=self.sofa_point,
+ left_sofa_point=self.left_sofa_point,
+ right_sofa_point=self.right_sofa_point,
+ middle_sofa_point=self.middle_sofa_point,
left_sofa_area=self.left_sofa_area,
+ middle_sofa_area=self.middle_sofa_area,
right_sofa_area=self.right_sofa_area,
),
- transitions={"succeeded": transition, "failed": "failed"},
- )
-
- self.add_state(
- "LOOK_HOST",
- LookToPoint(),
- transitions={
- "succeeded": "SAY_HOST",
- "aborted": "SAY_HOST",
- "canceled": "SAY_HOST",
- "timeout": "SAY_HOST",
- },
- )
-
- self.add_state(
- "SAY_HOST",
- Say(text="I am going to quickly learn the host's face."),
- transitions={
- "succeeded": "LEARN_HOST",
- "aborted": "LEARN_HOST",
- "canceled": "LEARN_HOST",
- },
- )
-
- self.add_state(
- "LEARN_HOST",
- HRILearnFaces(guest_id="host", dataset_size=10),
- transitions={"succeeded": "LOOK_TO_SEAT", "failed": "failed"},
+ transitions={"succeeded": "SAY_SEAT_GUEST", "failed": "failed"},
)
- self.add_state(
- "LOOK_TO_SEAT",
- LookToPoint(),
- transitions={
- "succeeded": "SAY_SEAT_GUEST",
- "aborted": "SAY_SEAT_GUEST",
- "canceled": "SAY_SEAT_GUEST",
- "timeout": "SAY_SEAT_GUEST",
- },
- remappings={"pointstamped": "guest_seat_point"},
- )
self.add_state(
"SAY_SEAT_GUEST",
Say(),
@@ -266,38 +217,33 @@ def __init__(
},
remappings={"text": "seating_string"},
)
+
self.add_state(
"WAIT_FOR_GUEST_TO_SEAT",
Wait(wait_time=5.0),
- transitions={"succeeded": "RESET_HEAD_2", "failed": "RESET_HEAD_2"},
- )
-
- self.add_state(
- "RESET_HEAD_2",
- PlayMotion(motion_name="look_centre"),
- transitions={
- "succeeded": "succeeded",
- "aborted": "succeeded",
- "canceled": "succeeded",
- },
+ transitions={"succeeded": "succeeded", "failed": "failed"},
)
def __load_ros_parameters(self):
# Load parameters from file
- self.seating_area = ShapelyPolygon(
- [
- self._node.get_parameter("seat_area.top_left").value,
- self._node.get_parameter("seat_area.top_right").value,
- self._node.get_parameter("seat_area.bottom_right").value,
- self._node.get_parameter("seat_area.bottom_left").value,
- ]
+
+ self.left_sofa_point = Point(
+ x=self._node.get_parameter("left_sofa_point.x").value,
+ y=self._node.get_parameter("left_sofa_point.y").value,
+ z=self._node.get_parameter("left_sofa_point.z").value,
+ )
+
+ self.middle_sofa_point = Point(
+ x=self._node.get_parameter("middle_sofa_point.x").value,
+ y=self._node.get_parameter("middle_sofa_point.y").value,
+ z=self._node.get_parameter("middle_sofa_point.z").value,
)
- self.sofa_point = Point(
- x=self._node.get_parameter("sofa_point.x").value,
- y=self._node.get_parameter("sofa_point.y").value,
- z=self._node.get_parameter("sofa_point.z").value,
+ self.right_sofa_point = Point(
+ x=self._node.get_parameter("right_sofa_point.x").value,
+ y=self._node.get_parameter("right_sofa_point.y").value,
+ z=self._node.get_parameter("right_sofa_point.z").value,
)
sofa_area = {
@@ -312,38 +258,53 @@ def __load_ros_parameters(self):
self._node.get_parameter("sofa_area.bottom_left").value
),
}
- sofa_middle_top = (sofa_area["top_right"] + sofa_area["top_left"]) / 2
- sofa_middle_bottom = (sofa_area["bottom_left"] + sofa_area["bottom_right"]) / 2
+
+ top_left = sofa_area["top_left"]
+ top_right = sofa_area["top_right"]
+ bottom_right = sofa_area["bottom_right"]
+ bottom_left = sofa_area["bottom_left"]
+
+ sofa_middle_top_left = top_left + (top_right - top_left) / 3.0
+ sofa_middle_top_right = top_left + 2.0 * (top_right - top_left) / 3.0
+ sofa_middle_bottom_left = bottom_left + (bottom_right - bottom_left) / 3.0
+ sofa_middle_bottom_right = (
+ bottom_left + 2.0 * (bottom_right - bottom_left) / 3.0
+ )
self.sofa_area = ShapelyPolygon(
[
- sofa_area["top_left"],
- sofa_area["top_right"],
- sofa_area["bottom_right"],
- sofa_area["bottom_left"],
+ top_left,
+ top_right,
+ bottom_right,
+ bottom_left,
]
)
self.left_sofa_area = ShapelyPolygon(
[
- sofa_area["top_left"],
- sofa_middle_top,
- sofa_middle_bottom,
- sofa_area["bottom_left"],
+ top_left,
+ sofa_middle_top_left,
+ sofa_middle_bottom_left,
+ bottom_left,
]
)
- self.right_sofa_area = ShapelyPolygon(
+ self.middle_sofa_area = ShapelyPolygon(
[
- sofa_middle_top,
- sofa_area["top_right"],
- sofa_area["bottom_right"],
- sofa_middle_bottom,
+ sofa_middle_top_left,
+ sofa_middle_top_right,
+ sofa_middle_bottom_right,
+ sofa_middle_bottom_left,
]
)
- self.max_people_on_sofa = int(
- self._node.get_parameter("max_people_on_sofa").value
+ self.right_sofa_area = ShapelyPolygon(
+ [
+ sofa_middle_top_right,
+ top_right,
+ bottom_right,
+ sofa_middle_bottom_right,
+ ]
)
diff --git a/tasks/HRI/config/lab.yaml b/tasks/HRI/config/lab.yaml
deleted file mode 100644
index 5236db1b1..000000000
--- a/tasks/HRI/config/lab.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-hri: # the `hri` Node's Parameters
- ros__parameters:
- # Start location after door
- start_pose:
- position:
- x: 2.620011965794007
- y: 0.4284228083916832
- z: 0.0
- orientation:
- x: 0.0
- y: 0.0
- z: -0.9676446468413096
- w: 0.25231693847095826
-
- # Where to wait for guests
- door_pose:
- position:
- x: 0.9737232865224763
- y: 0.6644210227864706
- z: 0.0
- orientation:
- x: 0.0
- y: 0.0
- z: 0.9883189417995438
- w: 0.15239970236266812
-
- door_polygon:
- top_left: [-0.2931315004825592, 0.8144665956497192]
- top_right: [-0.08571681380271912, 1.1960442066192627]
- bottom_right: [0.38185712695121765, 1.0947651863098145]
- bottom_left: [0.185118168592453, 0.6390931606292725]
-
- # Where to position self for seating guests
- seat_pose:
- position:
- x: 0.9241805428867255
- y: -0.37066992922907555
- z: 0.0
- orientation:
- x: 0.0
- y: 0.0
- z: -0.798049181701085
- w: 0.6025923195546294
-
-
-
- # Where the robot looks at the general sofa
- sofa_point:
- x: 0.31079837679862976
- y: -2.7174582481384277
- z: 0.5
-
- # From robot POV: [top left, top right,bottom right, bottom left ]
- # General area to perform detections in
- seat_area:
- top_left: [0.7725991010665894, -3.1269145011901855]
- top_right: [-0.8415073156356812, -2.6533150672912598]
- bottom_right: [-0.5009860992431641, -1.2560838460922241]
- bottom_left: [1.1633232831954956, -1.7793333530426025]
-
- # Max number of seats
- max_people_on_sofa: 2
-
- # Seatable area
- sofa_area:
- top_left: [0.8283745646476746, -3.395517587661743]
- top_right: [-0.34002554416656494, -3.0816760063171387]
- bottom_right: [-0.20183980464935303, -2.4824330806732178]
- bottom_left: [1.0337331295013428, -2.806881904602051]
diff --git a/tasks/HRI/config/lab_arena1.yaml b/tasks/HRI/config/lab_arena1.yaml
new file mode 100644
index 000000000..8e774ce0c
--- /dev/null
+++ b/tasks/HRI/config/lab_arena1.yaml
@@ -0,0 +1,87 @@
+hri: # the `hri` Node's Parameters
+ ros__parameters:
+ start_point:
+ position:
+ x: -10.543181865250483
+ y: 19.657461427517205
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: -0.5006482302925602
+ w: 0.8656508242385769
+
+ # Where to wait for guests
+ door_pose:
+ position:
+ x: -10.519356990378249
+ y: 17.02404825429358
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: -0.8128891810577156
+ w: 0.5824183885484012
+
+ grab_pose:
+ position:
+ x: -10.527612620449109
+ y: 17.196074261033452
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: -0.7928145458503555
+ w: 0.6094629569449603
+
+
+
+ door_polygon:
+ top_left: [-10.435281753540039, 15.317619323730469]
+ top_right: [-11.30875015258789, 15.590652465820312]
+ bottom_right: [-10.973834991455078, 16.30986976623535]
+ bottom_left: [-10.199817657470703, 16.08153533935547]
+
+ # Where to position self for seating guests
+ seat_pose:
+ position:
+ x: -9.949548986961878
+ y: 18.613158376577758
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: -0.15437572242672076
+ w: 0.9880122146639828
+
+ # Where the robot looks at the general sofa
+ left_sofa_point:
+ x: -7.112998962402344
+ y: 18.6096248626709
+ z: 0.5
+
+ middle_sofa_point:
+ x: -7.32270622253418
+ y: 17.866853713989258
+ z: 0.5
+
+ right_sofa_point:
+ x: -7.6437883377075195
+ y: 17.04224967956543
+ z: 0.5
+
+ seat_area:
+ top_left: [-6.397213935852051, 19.88530921936035]
+ top_right: [-7.517071723937988, 15.646678924560547]
+ bottom_right: [-9.564236640930176, 16.19935417175293]
+ bottom_left: [-8.219103813171387, 20.35795783996582]
+
+ # Max number of seats
+ max_people_on_sofa: 3
+
+ # Seatable area
+ sofa_area:
+ top_left: [-6.694643020629883, 19.03266143798828]
+ top_right: [-7.39281702041626, 16.57363510131836]
+ bottom_right: [-8.41148853302002, 16.765850067138672]
+ bottom_left: [-7.506037712097168, 19.303058624267578]
diff --git a/tasks/HRI/config/lab_arena2.yaml b/tasks/HRI/config/lab_arena2.yaml
new file mode 100644
index 000000000..2a213b076
--- /dev/null
+++ b/tasks/HRI/config/lab_arena2.yaml
@@ -0,0 +1,65 @@
+hri: # the `hri` Node's Parameters
+ ros__parameters:
+
+ # Where to wait for guests
+ door_pose:
+ position:
+ x: 4.717383410491155
+ y: 17.660128284836173
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: -0.683215101396084
+ w: 0.7302171767524637
+
+
+
+
+ door_polygon:
+ top_left: [5.440979480743408, 15.768505096435547]
+ top_right: [4.780439376831055, 15.682376861572266]
+ bottom_right: [4.521971225738525, 16.677654266357422]
+ bottom_left: [5.364399433135986, 16.802059173583984]
+
+ # Where to position self for seating guests
+ seat_pose:
+ position:
+ x: 4.204090241696327
+ y: 19.178058281029575
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: 0.15804665933431114
+ w: 0.9874316449624573
+
+
+
+
+
+ # Where the robot looks at the general sofa
+ left_sofa_point:
+ x: 7.210865020751953
+ y: 20.300580978393555
+ z: 0.5
+
+ middle_sofa_point:
+ x: 7.459762096405029
+ y: 19.592403411865234
+ z: 0.5
+
+ right_sofa_point:
+ x: 7.498050212860107
+ y: 18.798095703125
+ z: 0.5
+
+ # Max number of seats
+ max_people_on_sofa: 3
+
+ # Seatable area
+ sofa_area:
+ top_left: [7.55566930770874, 20.925668716430664]
+ top_right: [7.937021255493164, 18.18181037902832]
+ bottom_right: [6.665816307067871, 18.077146530151367]
+ bottom_left: [6.448974132537842, 20.768667221069336]
diff --git a/tasks/HRI/config/lab_arena3.yaml b/tasks/HRI/config/lab_arena3.yaml
new file mode 100644
index 000000000..39dfaa71d
--- /dev/null
+++ b/tasks/HRI/config/lab_arena3.yaml
@@ -0,0 +1,61 @@
+hri: # the `hri` Node's Parameters
+ ros__parameters:
+
+ # Where to wait for guests
+ door_pose:
+ position:
+ x: 17.77635822779931
+ y: 11.903880522879188
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: -0.8146009159754469
+ w: 0.5800218510469781
+
+
+ door_polygon:
+ top_left: [18.044937133789062, 10.311516761779785]
+ top_right: [17.13740348815918, 10.5519676208496]
+ bottom_right: [17.326383590698242, 11.201048851013184]
+ bottom_left: [18.199600219726562, 10.991767883300781]
+
+ # Where to position self for seating guests
+ seat_pose:
+ position:
+ x: 17.978049686225646
+ y: 13.336148380679733
+ z: 0.0
+ orientation:
+ x: 0.0
+ y: 0.0
+ z: -0.1314277463380143
+ w: 0.991325752461072
+
+
+
+ # Where the robot looks at the general sofa
+ left_sofa_point:
+ x: 21.1013126373291
+ y: 13.6877813339233
+ z: 0.5
+
+ middle_sofa_point:
+ x: 20.977664947509766
+ y: 12.974174499511719
+ z: 0.5
+
+ right_sofa_point:
+ x: 20.755189895629883
+ y: 12.259184837341309
+ z: 0.5
+
+ # Max number of seats
+ max_people_on_sofa: 3
+
+ # Seatable area
+ sofa_area:
+ top_left: [21.528507232666016, 14.159513473510742]
+ top_right: [20.953237533569336, 11.504096984863281]
+ bottom_right: [19.915803909301758, 11.676433563232422]
+ bottom_left: [20.593555450439453, 14.369909286499023]
diff --git a/tasks/HRI/launch/HRI.launch.py b/tasks/HRI/launch/HRI.launch.py
index 55640f27d..af86f2e92 100644
--- a/tasks/HRI/launch/HRI.launch.py
+++ b/tasks/HRI/launch/HRI.launch.py
@@ -59,16 +59,6 @@ def generate_launch_description():
output="screen",
)
- state_machine = Node(
- package="HRI",
- executable="sm",
- name="hri",
- parameters=[
- os.path.join(get_package_share_directory("HRI"), "config", "lab.yaml")
- ],
- output="screen",
- )
-
return LaunchDescription(
[
load_motions,
@@ -78,6 +68,5 @@ def generate_launch_description():
eye_tracker,
transcribe_speech,
llm_service,
- state_machine,
]
)
diff --git a/tasks/HRI/launch/HRI_only.launch.py b/tasks/HRI/launch/HRI_only.launch.py
new file mode 100644
index 000000000..af50089a0
--- /dev/null
+++ b/tasks/HRI/launch/HRI_only.launch.py
@@ -0,0 +1,22 @@
+import os
+from ament_index_python.packages import get_package_share_directory
+from launch import LaunchDescription
+from launch_ros.actions import Node
+from launch.actions import IncludeLaunchDescription, TimerAction
+from launch.launch_description_sources import AnyLaunchDescriptionSource
+
+
+def generate_launch_description():
+ state_machine = Node(
+ package="HRI",
+ executable="sm",
+ name="hri",
+ parameters=[
+ os.path.join(
+ get_package_share_directory("HRI"), "config", "lab_arena2.yaml"
+ )
+ ],
+ output="screen",
+ )
+
+ return LaunchDescription([state_machine])
diff --git a/tasks/HRI/setup.py b/tasks/HRI/setup.py
index 74b688b48..ef50c359e 100644
--- a/tasks/HRI/setup.py
+++ b/tasks/HRI/setup.py
@@ -53,6 +53,7 @@ def run(self):
"start_sm = HRI.states.start_door_sm:main",
"recognise = HRI.states.recognise:main",
"place_bag = HRI.states.place_bag:main",
+ "n_and_d = HRI.states.get_name_and_drink:main",
],
},
)
diff --git a/tasks/restaurant/package.xml b/tasks/restaurant/package.xml
index a798b9b69..976b92e17 100644
--- a/tasks/restaurant/package.xml
+++ b/tasks/restaurant/package.xml
@@ -7,12 +7,16 @@
illia
MIT
- smach
- smach_ros
+ rclpy
+ yasmin
+ yasmin_ros
skills
lasr_vision_interfaces
std_msgs
geometry_msgs
+ sensor_msgs
+ visualization_msgs
+ message_filters
ament_copyright
ament_flake8
diff --git a/tasks/restaurant/restaurant/states/__init__.py b/tasks/restaurant/restaurant/states/__init__.py
index 9f408fb35..468ee7b26 100644
--- a/tasks/restaurant/restaurant/states/__init__.py
+++ b/tasks/restaurant/restaurant/states/__init__.py
@@ -1,2 +1,4 @@
-from .detect_wave import DetectWave
-from .survey import Survey
+# from .detect_wave import DetectWave
+from .detect_waving_person_rgb import DetectWavingPersonRGB
+
+# from .survey import Survey
diff --git a/tasks/restaurant/restaurant/states/detect_waving_person_rgb.py b/tasks/restaurant/restaurant/states/detect_waving_person_rgb.py
new file mode 100644
index 000000000..a747237d1
--- /dev/null
+++ b/tasks/restaurant/restaurant/states/detect_waving_person_rgb.py
@@ -0,0 +1,600 @@
+import rclpy
+import yasmin
+from yasmin_ros import ServiceState
+import yasmin_ros
+from time import sleep, time
+import message_filters
+from sensor_msgs.msg import Image, CameraInfo, LaserScan
+from geometry_msgs.msg import PointStamped, Point
+from std_msgs.msg import Header
+from visualization_msgs.msg import Marker, MarkerArray
+from rclpy.qos import QoSProfile, ReliabilityPolicy, HistoryPolicy
+from geometry_msgs.msg import PoseWithCovarianceStamped
+from lasr_vision_interfaces.srv import YoloPoseDetection3D
+from rclpy.duration import Duration
+import tf2_ros as tf
+from tf2_geometry_msgs.tf2_geometry_msgs import do_transform_point
+import math
+import numpy as np
+import logging
+
+logging.basicConfig(level=logging.INFO)
+
+
+class DetectWavingPersonRGB(ServiceState):
+ """
+ Detect waving customers using YOLO 3D pose detection.
+
+ Subscribes to RGB + depth images, detects hand-up poses, and returns
+ the closest waving person's position as a PointStamped.
+
+ Key detection logic:
+ - Hand is considered "up" if wrist Z > shoulder Z (in 3D)
+ - Returns closest waving person by distance from robot
+ - Outputs: wave_detected (bool), wave_position (PointStamped), detection_confidence (float)
+ """
+
+ def __init__(
+ self,
+ image_topic: str = "/head_front_camera/rgb/image_raw",
+ depth_image_topic: str = "/head_front_camera/depth/image_raw",
+ depth_camera_info_topic: str = "/head_front_camera/depth/camera_info",
+ model: str = "yolo11n-pose.pt",
+ confidence: float = 0.5,
+ target_frame: str = "map",
+ slop: float = 0.5,
+ ):
+ super().__init__(
+ srv_type=YoloPoseDetection3D,
+ srv_name="/yolo/detect3d_pose",
+ create_request_handler=self._create_req,
+ outcomes=["waving", "not_waving", "failed"],
+ response_handler=self._response_handler,
+ )
+ self.set_description("Detect waving customer via YOLO 3D pose detection")
+ self.add_output_key("wave_detected")
+ self.add_output_key("wave_position")
+ self.add_output_key("detection_confidence")
+
+ self.image_topic = image_topic
+ self.depth_image_topic = depth_image_topic
+ self.depth_camera_info_topic = depth_camera_info_topic
+ self.model = model
+ self.confidence = confidence
+ self.target_frame = target_frame
+
+ # Setup sensor synchronization
+ camera_qos = QoSProfile(
+ depth=10,
+ reliability=ReliabilityPolicy.BEST_EFFORT,
+ history=HistoryPolicy.KEEP_LAST,
+ )
+
+ # Cache camera info separately (doesn't change often)
+ self.cam_info = None
+ self._node.create_subscription(
+ CameraInfo,
+ self.depth_camera_info_topic,
+ self._cache_camera_info,
+ qos_profile=camera_qos,
+ )
+
+ # Synchronize image and depth
+ image_sub = message_filters.Subscriber(
+ self._node, Image, self.image_topic, qos_profile=camera_qos
+ )
+ depth_sub = message_filters.Subscriber(
+ self._node, Image, self.depth_image_topic, qos_profile=camera_qos
+ )
+ self.ts = message_filters.ApproximateTimeSynchronizer(
+ [image_sub, depth_sub], queue_size=30, slop=slop
+ )
+ self.data = None
+
+ # Subscribe to laser scan for distance estimates
+ self.latest_scan = None
+ self._node.create_subscription(
+ LaserScan,
+ "/scan",
+ self._laser_callback,
+ 10,
+ # qos_profile=camera_qos,
+ )
+
+ # Publishers for visualization
+ self._marker_publisher = self._node.create_publisher(
+ MarkerArray,
+ "/restaurant/waving_person_markers",
+ 10,
+ )
+
+ # Subscribe to robot pose in map frame
+ self._robot_pose = None
+ self._node.create_subscription(
+ PoseWithCovarianceStamped,
+ "/amcl_pose",
+ lambda msg: setattr(self, "_robot_pose", msg.pose.pose),
+ qos_profile=camera_qos,
+ )
+
+ # TF2 buffer for frame transformations
+ self._tf_buffer = tf.Buffer()
+ self._tf_listener = tf.TransformListener(self._tf_buffer, self._node)
+
+ def _cache_camera_info(self, msg: CameraInfo) -> None:
+ """Cache camera info once at startup"""
+ if self.cam_info is None:
+ self.cam_info = msg
+
+ def _laser_callback(self, msg: LaserScan) -> None:
+ """Store latest laser scan for fallback distance estimates"""
+ self.latest_scan = msg
+
+ def _create_req(self, blackboard):
+ """Build service request with synchronized image/depth and cached camera info"""
+ # Wait for camera info
+ if self.cam_info is None:
+ deadline = time() + 5.0
+ while self.cam_info is None and time() < deadline:
+ # rclpy.spin_once(self._node, timeout_sec=0.1)
+ sleep(1)
+ if self.cam_info is None:
+ self._node.get_logger().error(
+ f"Timed out waiting for camera info on {self.depth_camera_info_topic}"
+ )
+ return None
+
+ # Wait for synchronized image + depth
+ self.data = None
+
+ def callback(image_msg, depth_msg):
+ if self.data is not None:
+ return
+ self.data = (image_msg, depth_msg)
+
+ self.ts.registerCallback(callback)
+
+ deadline = time() + 5.0
+ while not self.data:
+ if time() > deadline:
+ self._node.get_logger().error(
+ f"Timed out waiting for synced rgb/depth frames on "
+ f"{self.image_topic} / {self.depth_image_topic}"
+ )
+ return None
+ # rclpy.spin_once(self._node, timeout_sec=0.1)
+ sleep(1)
+
+ image_msg, depth_msg = self.data
+
+ # Build service request
+ req = YoloPoseDetection3D.Request()
+ req.image_raw = image_msg
+ req.depth_image = depth_msg
+ req.depth_camera_info = self.cam_info
+ req.model = self.model
+ req.confidence = self.confidence
+ req.target_frame = self.target_frame
+
+ # Store laser scan and request timestamp for response handling
+ self._request_scan = self.latest_scan
+ self._request_timestamp = image_msg.header.stamp
+ return req
+
+ def _get_laser_distance_at_angle(self, scan: LaserScan, angle_rad: float) -> float:
+ """Get distance from laser at a specific angle. Returns distance or None if invalid."""
+ if scan is None:
+ yasmin.YASMIN_LOG_DEBUG(" Laser scan is None")
+ return None
+
+ try:
+ # Normalize angle to laser scan range
+ angle_index = (angle_rad - scan.angle_min) / scan.angle_increment
+ angle_index = int(round(angle_index))
+
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Laser lookup: angle={math.degrees(angle_rad):.1f}°, "
+ f"angle_min={math.degrees(scan.angle_min):.1f}°, "
+ f"angle_max={math.degrees(scan.angle_max):.1f}°, "
+ f"angle_increment={math.degrees(scan.angle_increment):.3f}°, "
+ f"angle_index={angle_index}, num_ranges={len(scan.ranges)}"
+ )
+
+ if 0 <= angle_index < len(scan.ranges):
+ dist = scan.ranges[angle_index]
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Raw laser range[{angle_index}] = {dist:.2f}m, "
+ f"valid=[{scan.range_min:.2f}, {scan.range_max:.2f}]"
+ )
+ if scan.range_min <= dist <= scan.range_max:
+ return dist
+ else:
+ yasmin.YASMIN_LOG_DEBUG(f" Distance {dist:.2f}m out of range")
+ else:
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Angle index {angle_index} out of bounds [0, {len(scan.ranges)})"
+ )
+ except Exception as e:
+ yasmin.YASMIN_LOG_WARN(f"Failed to get laser distance: {e}")
+ return None
+
+ def _calculate_person_center(self, keypoints_dict):
+ """Calculate center of person from all keypoints."""
+ valid_points = []
+ for name, point in keypoints_dict.items():
+ if not (math.isnan(point.x) or math.isnan(point.y) or math.isnan(point.z)):
+ valid_points.append(point)
+
+ if not valid_points:
+ return None
+
+ center = Point(
+ x=sum(p.x for p in valid_points) / len(valid_points),
+ y=sum(p.y for p in valid_points) / len(valid_points),
+ z=sum(p.z for p in valid_points) / len(valid_points),
+ )
+ return center
+
+ def _transform_to_base_footprint(self, point, timestamp):
+ """Transform point from map frame to base_footprint frame using TF2.
+
+ Returns (success: bool, transformed_point: Point).
+ If transform fails, returns (False, None) — caller should not use the result.
+ """
+ try:
+ # Lookup transform from map to base_footprint
+ transform = self._tf_buffer.lookup_transform(
+ "base_footprint", "map", timestamp, Duration(seconds=0.5)
+ )
+ except Exception as e:
+ yasmin.YASMIN_LOG_WARN(
+ f"TF map->base_footprint lookup failed ({type(e).__name__}): {e}"
+ )
+ return False, None
+
+ try:
+ # Create PointStamped in map frame
+ point_stamped = PointStamped()
+ point_stamped.header.frame_id = "map"
+ point_stamped.header.stamp = timestamp
+ point_stamped.point = point
+
+ # Transform to base_footprint frame
+ point_transformed = do_transform_point(point_stamped, transform)
+ return True, point_transformed.point
+ except Exception as e:
+ yasmin.YASMIN_LOG_WARN(
+ f"Point transformation failed ({type(e).__name__}): {e}"
+ )
+ return False, None
+
+ def _response_handler(self, blackboard, response):
+ """Process YOLO response and detect waving customers.
+
+ Strategy:
+ 1. Use YOLO 3D detection if depth is valid (most accurate)
+ 2. Fall back to laser distance + RGB direction if depth unavailable
+ """
+ # Extract camera intrinsics for fallback calculation
+ K = self.cam_info.k
+ fx, fy = K[0], K[4]
+ cx, cy = K[2], K[5]
+
+ # Find all people with hands up
+ best_point = None
+ best_dist = None
+ best_confidence = 0
+ best_method = None
+
+ yasmin.YASMIN_LOG_INFO(f"Processing {len(response.detections)} detections")
+ for det_idx, det in enumerate(response.detections):
+ # Convert keypoints list to dict for easier access
+ kp = {k.keypoint_name: k.point for k in det.keypoints}
+ yasmin.YASMIN_LOG_DEBUG(f"Detection {det_idx}: has {len(kp)} keypoints")
+
+ # Check for hands up (wrists above shoulders in Z)
+ is_waving = True
+
+ # Try left hand (wrist must be significantly above shoulder, not just barely)
+ has_left_wrist = "left_wrist" in kp and "left_shoulder" in kp
+ if has_left_wrist:
+ wrist_z = kp["left_wrist"].z
+ shoulder_z = kp["left_shoulder"].z
+ is_up = wrist_z > shoulder_z + 0.1
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Left hand: wrist_z={wrist_z:.3f}, shoulder_z={shoulder_z:.3f}, diff={wrist_z-shoulder_z:.3f}, is_up={is_up}"
+ )
+ if is_up:
+ is_waving = True
+
+ # Try right hand (wrist must be significantly above shoulder, not just barely)
+ if not is_waving:
+ has_right_wrist = "right_wrist" in kp and "right_shoulder" in kp
+ if has_right_wrist:
+ wrist_z = kp["right_wrist"].z
+ shoulder_z = kp["right_shoulder"].z
+ is_up = wrist_z > shoulder_z + 0.1
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Right hand: wrist_z={wrist_z:.3f}, shoulder_z={shoulder_z:.3f}, diff={wrist_z-shoulder_z:.3f}, is_up={is_up}"
+ )
+ if is_up:
+ is_waving = True
+
+ if not is_waving:
+ yasmin.YASMIN_LOG_DEBUG(f" No hand-up detected, skipping")
+ continue
+
+ # Calculate center of person from all keypoints
+ person_center = self._calculate_person_center(kp)
+ if person_center is None:
+ yasmin.YASMIN_LOG_INFO(
+ f" ✗ Could not calculate person center (no valid keypoints), skipping"
+ )
+ continue
+
+ yasmin.YASMIN_LOG_INFO(
+ f" ✓ Person center calculated: ({person_center.x:.3f}, {person_center.y:.3f}, {person_center.z:.3f})"
+ )
+
+ # Check for NaN or invalid values in depth estimate
+ has_nan = (
+ math.isnan(person_center.x)
+ or math.isnan(person_center.y)
+ or math.isnan(person_center.z)
+ )
+
+ # Primary: use 3D depth estimate if valid
+ dist = math.sqrt(person_center.x**2 + person_center.y**2)
+ method = "depth"
+ point_to_use = person_center
+
+ # Fallback: if depth seems unreliable (NaN, Z > 5m where depth error is large, or < 0.1m),
+ # try laser-based estimate (laser is more reliable for distant objects)
+ trigger_reason = None
+ if has_nan:
+ trigger_reason = "NaN in depth"
+ elif person_center.z > 5.0:
+ trigger_reason = f"depth > 5m (z={person_center.z:.2f}m)"
+ elif person_center.z < 0.1:
+ trigger_reason = f"depth < 0.1m (z={person_center.z:.2f}m)"
+
+ if trigger_reason:
+ yasmin.YASMIN_LOG_INFO(
+ f"Depth unreliable ({trigger_reason}), attempting laser fallback"
+ )
+
+ # Transform person center from map frame to base_footprint frame for laser query
+ yasmin.YASMIN_LOG_DEBUG(" Attempting TF: map -> base_footprint")
+ tf_success, point_in_base = self._transform_to_base_footprint(
+ person_center, self._request_timestamp
+ )
+
+ if not tf_success:
+ yasmin.YASMIN_LOG_WARN(
+ " ✗ Cannot use laser fallback without TF (coordinates would be wrong frame)"
+ )
+ else:
+ yasmin.YASMIN_LOG_DEBUG(
+ f" ✓ TF successful: map ({person_center.x:.3f}, {person_center.y:.3f}) "
+ f"-> base_footprint ({point_in_base.x:.3f}, {point_in_base.y:.3f})"
+ )
+ angle_rad = math.atan2(point_in_base.y, point_in_base.x)
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Transformed to base_footprint: ({point_in_base.x:.2f}, {point_in_base.y:.2f})"
+ )
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Angle in base_footprint: {math.degrees(angle_rad):.1f}° (rad={angle_rad:.3f})"
+ )
+
+ if self._request_scan is None:
+ yasmin.YASMIN_LOG_WARN(
+ " No laser scan available, cannot use fallback"
+ )
+ else:
+ laser_dist = self._get_laser_distance_at_angle(
+ self._request_scan, angle_rad
+ )
+
+ if laser_dist is not None:
+ yasmin.YASMIN_LOG_INFO(
+ f" Laser distance: {laser_dist:.2f}m"
+ )
+ # Use laser distance but keep XY from depth (direction is reliable)
+ magnitude = math.sqrt(
+ person_center.x**2 + person_center.y**2
+ )
+ if magnitude > 0:
+ # Scale the depth estimate to match laser distance
+ scale = laser_dist / magnitude
+ point_to_use = Point(
+ x=person_center.x * scale,
+ y=person_center.y * scale,
+ z=laser_dist
+ * 0.2, # Assume person height ~0.2m from ground estimate
+ )
+ dist = laser_dist
+ method = "laser"
+ yasmin.YASMIN_LOG_DEBUG(
+ f" Using laser fallback: scaled to ({point_to_use.x:.2f}, {point_to_use.y:.2f}, {point_to_use.z:.2f})"
+ )
+ else:
+ yasmin.YASMIN_LOG_WARN(
+ " Magnitude is zero, cannot scale"
+ )
+ else:
+ yasmin.YASMIN_LOG_WARN(
+ " No laser distance found at that angle"
+ )
+
+ # Select closest waving person
+ if best_dist is None or dist < best_dist:
+ best_dist = dist
+ best_point = point_to_use
+ best_confidence = 0.5
+ best_method = method
+
+ if best_point is None:
+ yasmin.YASMIN_LOG_INFO("✗ No waving customers detected")
+ blackboard["wave_detected"] = False
+ blackboard["wave_position"] = PointStamped()
+ blackboard["detection_confidence"] = 0.0
+ # Publish empty marker array to clear previous detections
+ self._marker_publisher.publish(MarkerArray())
+ return "not_waving"
+
+ yasmin.YASMIN_LOG_INFO(
+ f"✓ Waving customer detected (method={best_method}): "
+ f"pos=({best_point.x:.2f}, {best_point.y:.2f}, {best_point.z:.2f})m, "
+ f"dist={best_dist:.2f}m"
+ )
+
+ # Publish visualization markers
+ marker_array = MarkerArray()
+
+ # Marker 1: Detected person position (sphere)
+ person_marker = Marker()
+ person_marker.header.frame_id = self.target_frame
+ person_marker.header.stamp = self._node.get_clock().now().to_msg()
+ person_marker.id = 0
+ person_marker.type = Marker.SPHERE
+ person_marker.action = Marker.ADD
+ person_marker.pose.position = best_point
+ person_marker.scale.x = 0.3
+ person_marker.scale.y = 0.3
+ person_marker.scale.z = 0.3
+ # Color by method: green=depth, cyan=laser
+ if best_method == "depth":
+ person_marker.color.r = 0.0
+ person_marker.color.g = 1.0
+ person_marker.color.b = 0.0
+ else: # laser
+ person_marker.color.r = 0.0
+ person_marker.color.g = 1.0
+ person_marker.color.b = 1.0
+ person_marker.color.a = 0.8
+ marker_array.markers.append(person_marker)
+
+ # Marker 2: Laser ray line (if laser fallback was used)
+ if best_method == "laser" and self._robot_pose is not None:
+ # Create line from robot position to detected person
+ line_marker = Marker()
+ line_marker.header.frame_id = self.target_frame
+ line_marker.header.stamp = self._node.get_clock().now().to_msg()
+ line_marker.id = 1
+ line_marker.type = Marker.LINE_STRIP
+ line_marker.action = Marker.ADD
+ line_marker.scale.x = 0.05 # line width
+ line_marker.color.r = 0.0
+ line_marker.color.g = 1.0
+ line_marker.color.b = 1.0
+ line_marker.color.a = 0.6
+ # Line from robot position to person
+ line_marker.points.append(self._robot_pose.position)
+ line_marker.points.append(best_point)
+ marker_array.markers.append(line_marker)
+
+ self._marker_publisher.publish(marker_array)
+
+ blackboard["wave_detected"] = True
+ blackboard["wave_position"] = PointStamped(
+ header=Header(frame_id=self.target_frame), point=best_point
+ )
+ blackboard["detection_confidence"] = best_confidence
+ return "waving"
+
+
+def main(args=None):
+ """Test harness for DetectWavingPersonRGB state.
+
+ Runs the detection in a loop for testing and visualization.
+ Publish markers to /restaurant/waving_person_markers in RViz.
+ """
+ rclpy.init(args=args)
+ yasmin_ros.set_ros_loggers()
+ # Create state machine that loops detection
+ sm = yasmin.StateMachine(
+ outcomes=["succeeded", "failed"],
+ handle_sigint=True,
+ )
+ sm.add_output_key("wave_detected")
+ sm.add_output_key("wave_position")
+ sm.add_output_key("detection_confidence")
+
+ def loop_cb(blackboard):
+ """After detection, loop back for continuous testing"""
+ return "loop"
+
+ # Add detection state
+ sm.add_state(
+ "DETECT",
+ DetectWavingPersonRGB(
+ image_topic="/head_front_camera/rgb/image_raw",
+ depth_image_topic="/head_front_camera/depth/image_raw",
+ depth_camera_info_topic="/head_front_camera/depth/camera_info",
+ model="yolo11n-pose.pt",
+ confidence=0.5,
+ target_frame="map",
+ ),
+ transitions={
+ "waving": "LOG_DETECTION",
+ "not_waving": "LOG_NO_DETECTION",
+ "failed": "LOG_FAILED",
+ "aborted": "LOG_FAILED", # ServiceState returns aborted on service failure
+ },
+ )
+
+ # Log detection
+ def log_detection(bb):
+ if "wave_position" in bb:
+ pos = bb["wave_position"].point
+ yasmin.YASMIN_LOG_INFO(
+ f"✓ Detected waving person at ({pos.x:.2f}, {pos.y:.2f}, {pos.z:.2f})"
+ )
+ return "loop"
+
+ sm.add_state(
+ "LOG_DETECTION",
+ yasmin.CbState(["loop"], log_detection),
+ transitions={"loop": "DETECT"},
+ )
+
+ # Log no detection
+ def log_no_detection(bb):
+ yasmin.YASMIN_LOG_INFO("✗ No waving customers detected")
+ return "loop"
+
+ sm.add_state(
+ "LOG_NO_DETECTION",
+ yasmin.CbState(["loop"], log_no_detection),
+ transitions={"loop": "DETECT"},
+ )
+
+ # Log failure
+ def log_failed(bb):
+ yasmin.YASMIN_LOG_ERROR("✗ Detection failed")
+ return "loop"
+
+ sm.add_state(
+ "LOG_FAILED",
+ yasmin.CbState(["loop"], log_failed),
+ transitions={"loop": "DETECT"},
+ )
+
+ yasmin.YASMIN_LOG_INFO(
+ "Starting DetectWavingPersonRGB test loop...\n"
+ "Visualize with RViz: /restaurant/waving_person_markers\n"
+ "Press Ctrl+C to exit"
+ )
+
+ try:
+ outcome = sm()
+ yasmin.YASMIN_LOG_INFO(f"State machine ended with outcome: {outcome}")
+ except KeyboardInterrupt:
+ yasmin.YASMIN_LOG_INFO("Test interrupted by user")
+ finally:
+ node.destroy_node()
+ rclpy.shutdown()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tasks/restaurant/setup.py b/tasks/restaurant/setup.py
index 9e8f614a7..49276e267 100644
--- a/tasks/restaurant/setup.py
+++ b/tasks/restaurant/setup.py
@@ -44,6 +44,7 @@ def run(self):
"sm = restaurant.state_machine:main",
"survey = restaurant.states.survey:main",
"detect_wave = restaurant.states.detect_wave:main",
+ "detect_waving_person_rgb = restaurant.states.detect_waving_person_rgb:main",
],
},
)