RAI is a multi-vendor agent framework for robotics, utilizing Langchain and ROS 2 tools to perform complex actions, defined scenarios, free interface execution, log summaries, voice interaction and more.
Apache License 2.0
164
stars
18
forks
source link
fix(hri.launch): use voice_hmi_node instead of hmi_node #246
After refactoring the hmi into text_hmi and voice_hmi the hri launchfile wasn't updated. It used deprecated hmi_node.
Proposed Changes
Removed deprecated hmi_node
Removed entrypoint
Altered HRI launch by replacing hmi_node with voice_hmi_node
Issues
Links to relevant issues
Testing
Before
Details
(rai-py3.12) mmajek@mmajek-2204:~/projects/internal/rai$ ros2 launch rai_bringup hri.launch.py keep_speaker_busy:=false recording_device:=3 silence_grace_period:=0.5 asr_vendor:=whisper # local solution, use openai for cloud based
[INFO] [launch]: All log files can be found below /home/mmajek/.ros/log/2024-09-26-19-31-30-315722-mmajek-2204-23775
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [asr_node-2]: process started with pid [23779]
[INFO] [tts_node-1]: process started with pid [23778]
[INFO] [rai_whoami_node-3]: process started with pid [23780]
[INFO] [hmi_node-4]: process started with pid [23781]
[rai_whoami_node-3] [INFO] [1727371891.222838169] [rai_whoami_node]: Robot constitution loaded from /home/mmajek/projects/internal/rai/install/rosbot_xl_whoami/share/rosbot_xl_whoami/description/robot_constitution.txt
[tts_node-1] [INFO] [1727371891.475951896] [tts_node]: TTS Node has been started
[hmi_node-4] [INFO] [1727371891.676725117] [hmi_node]: HMI Node has been started
[rai_whoami_node-3] [INFO] [1727371891.677309639] [rai_whoami_node]: Incoming request for RAI constitution, responding
[rai_whoami_node-3] [INFO] [1727371891.677932548] [rai_whoami_node]: Incoming request for RAI identity, responding
[hmi_node-4] [INFO] [1727371891.678304521] [hmi_node]: System prompt initialized.
[asr_node-2] [INFO] [1727371892.588345590] [rai_asr]: Parameters have been initialized
[asr_node-2] Using cache found in /home/mmajek/.cache/torch/hub/snakers4_silero-vad_master
[asr_node-2] [INFO] [1727371893.641983580] [rai_asr]: ASR Node has been initialized
[asr_node-2] [INFO] [1727371895.887387146] [rai_asr]: Recording...
[asr_node-2] [INFO] [1727371896.447344230] [rai_asr]: Stopped recording. Transcribing...
[asr_node-2] [INFO] [1727371896.846737369] [rai_asr]: Transcription: Thank you.
[asr_node-2] [INFO] [1727371896.847060344] [rai_asr]: Done transcribing.
[hmi_node-4] [INFO] [1727371896.847623618] [hmi_node]: Handling human message
[hmi_node-4] Error in StdOutCallbackHandler.on_chain_start callback: AttributeError("'NoneType' object has no attribute 'get'")
[asr_node-2] [WARN] [1727371896.929970120] [rai_asr]: Stream status: input overflow
[tts_node-1] [INFO] [1727371897.539227657] [tts_node]: Registering new TTS job: 0 length: 68 chars.
[hmi_node-4] [INFO] [1727371897.540825822] [hmi_node]: Finished handling human message
[tts_node-1] [INFO] [1727371899.023469275] [tts_node]: Job 0 completed.
[tts_node-1] [INFO] [1727371899.027975026] [tts_node]: Playing audio for job 0. /tmp/tmpf1bbouax.mp3
[asr_node-2] [INFO] [1727371903.890814282] [rai_asr]: Recording...
[asr_node-2] [INFO] [1727371906.210853015] [rai_asr]: Stopped recording. Transcribing...
[asr_node-2] [INFO] [1727371906.297381467] [rai_asr]: Transcription: Hello, 1-2-3-4-5-6-1
[asr_node-2] [INFO] [1727371906.297648161] [rai_asr]: Done transcribing.
[hmi_node-4] [INFO] [1727371906.298330040] [hmi_node]: Handling human message
[hmi_node-4] Error in StdOutCallbackHandler.on_chain_start callback: AttributeError("'NoneType' object has no attribute 'get'")
[asr_node-2] [WARN] [1727371906.380502357] [rai_asr]: Stream status: input overflow
[hmi_node-4] You're welcome! If there's anything else you need, feel free to ask.
[hmi_node-4]
[hmi_node-4] > Finished chain.
[hmi_node-4] Traceback (most recent call last):
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1562, in _request
[hmi_node-4] response = await self._client.send(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1674, in send
[hmi_node-4] response = await self._send_handling_auth(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1702, in _send_handling_auth
[hmi_node-4] response = await self._send_handling_redirects(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1739, in _send_handling_redirects
[hmi_node-4] response = await self._send_single_request(request)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1776, in _send_single_request
[hmi_node-4] response = await transport.handle_async_request(request)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_transports/default.py", line 377, in handle_async_request
[hmi_node-4] resp = await self._pool.handle_async_request(req)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 216, in handle_async_request
[hmi_node-4] raise exc from None
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 189, in handle_async_request
[hmi_node-4] await self._close_connections(closing)
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 305, in _close_connections
[hmi_node-4] await connection.aclose()
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection.py", line 171, in aclose
[hmi_node-4] await self._connection.aclose()
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/http11.py", line 265, in aclose
[hmi_node-4] await self._network_stream.aclose()
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 55, in aclose
[hmi_node-4] await self._stream.aclose()
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/anyio/streams/tls.py", line 202, in aclose
[hmi_node-4] await self.transport_stream.aclose()
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 1258, in aclose
[hmi_node-4] self._transport.close()
[hmi_node-4] File "/usr/lib/python3.12/asyncio/selector_events.py", line 1210, in close
[hmi_node-4] super().close()
[hmi_node-4] File "/usr/lib/python3.12/asyncio/selector_events.py", line 875, in close
[hmi_node-4] self._loop.call_soon(self._call_connection_lost, None)
[hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 795, in call_soon
[hmi_node-4] self._check_closed()
[hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 541, in _check_closed
[hmi_node-4] raise RuntimeError('Event loop is closed')
[hmi_node-4] RuntimeError: Event loop is closed
[hmi_node-4]
[hmi_node-4] The above exception was the direct cause of the following exception:
[hmi_node-4]
[hmi_node-4] Traceback (most recent call last):
[hmi_node-4] File "/home/mmajek/projects/internal/rai/install/rai_hmi/lib/rai_hmi/hmi_node", line 33, in
[hmi_node-4] sys.exit(load_entry_point('rai-hmi', 'console_scripts', 'hmi_node')())
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 293, in main
[hmi_node-4] asyncio.run(run_node())
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
[hmi_node-4] return runner.run(main)
[hmi_node-4] ^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
[hmi_node-4] return self._loop.run_until_complete(task)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
[hmi_node-4] return future.result()
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 285, in run_node
[hmi_node-4] executor.spin_once()
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 899, in spin_once
[hmi_node-4] self._spin_once_impl(timeout_sec)
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 896, in _spin_once_impl
[hmi_node-4] future.result() # raise any exceptions
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/task.py", line 94, in result
[hmi_node-4] raise self.exception()
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/task.py", line 239, in __call__
[hmi_node-4] self._handler.send(None)
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 508, in handler
[hmi_node-4] await call_coroutine()
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 396, in _execute
[hmi_node-4] await await_or_execute(sub.callback, *msg_tuple)
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 111, in await_or_execute
[hmi_node-4] return callback(*args)
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 210, in handle_human_message
[hmi_node-4] asyncio.run(self.handle_human_message_async(human_ros_msg))
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
[hmi_node-4] return runner.run(main)
[hmi_node-4] ^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
[hmi_node-4] return self._loop.run_until_complete(task)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
[hmi_node-4] return future.result()
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 264, in handle_human_message_async
[hmi_node-4] response = await self.agent_executor.ainvoke(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/chains/base.py", line 221, in ainvoke
[hmi_node-4] raise e
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/chains/base.py", line 212, in ainvoke
[hmi_node-4] await self._acall(inputs, run_manager=run_manager)
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 1678, in _acall
[hmi_node-4] next_step_output = await self._atake_next_step(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 1472, in _atake_next_step
[hmi_node-4] [
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 1500, in _aiter_next_step
[hmi_node-4] output = await self._action_agent.aplan(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 619, in aplan
[hmi_node-4] async for chunk in self.runnable.astream(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 3430, in astream
[hmi_node-4] async for chunk in self.atransform(input_aiter(), config, **kwargs):
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 3413, in atransform
[hmi_node-4] async for chunk in self._atransform_stream_with_config(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 2299, in _atransform_stream_with_config
[hmi_node-4] chunk: Output = await asyncio.create_task( # type: ignore[call-arg]
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 3383, in _atransform
[hmi_node-4] async for output in final_pipeline:
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 1451, in atransform
[hmi_node-4] async for ichunk in input:
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 5562, in atransform
[hmi_node-4] async for item in self.bound.atransform(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 1469, in atransform
[hmi_node-4] async for output in self.astream(final, config, **kwargs):
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 492, in astream
[hmi_node-4] raise e
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 470, in astream
[hmi_node-4] async for chunk in self._astream(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_openai/chat_models/base.py", line 1989, in _astream
[hmi_node-4] async for chunk in super()._astream(*args, **kwargs):
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_openai/chat_models/base.py", line 776, in _astream
[hmi_node-4] response = await self.async_client.create(**payload)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/resources/chat/completions.py", line 1412, in create
[hmi_node-4] return await self._post(
[hmi_node-4] ^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1829, in post
[hmi_node-4] return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1523, in request
[hmi_node-4] return await self._request(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1596, in _request
[hmi_node-4] raise APIConnectionError(request=request) from err
[hmi_node-4] openai.APIConnectionError: Connection error.
[ERROR] [hmi_node-4]: process has died [pid 23781, exit code 1, cmd '/home/mmajek/projects/internal/rai/install/rai_hmi/lib/rai_hmi/hmi_node --ros-args -r __node:=hmi_node --params-file /tmp/launch_params_i_v0fwaz'].
After
Details
ros2 launch rai_bringup hri.launch.py keep_speaker_busy:=false recording_device:=3 silence_grace_period:=0.5 asr_vendor:=whisper # local solution, use openai for cloud based
[INFO] [launch]: All log files can be found below /home/mmajek/.ros/log/2024-09-26-19-44-20-298788-mmajek-2204-26809
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [asr_node-2]: process started with pid [26813]
[INFO] [tts_node-1]: process started with pid [26812]
[INFO] [rai_whoami_node-3]: process started with pid [26814]
[INFO] [voice_hmi_node-4]: process started with pid [26815]
[rai_whoami_node-3] [INFO] [1727372661.193480027] [rai_whoami_node]: Robot constitution loaded from /home/mmajek/projects/internal/rai/install/rosbot_xl_whoami/share/rosbot_xl_whoami/description/robot_constitution.txt
[rai_whoami_node-3] [INFO] [1727372661.467455772] [rai_whoami_node]: Incoming request for RAI constitution, responding
[rai_whoami_node-3] [INFO] [1727372661.467977549] [rai_whoami_node]: Incoming request for RAI identity, responding
[voice_hmi_node-4] [INFO] [1727372661.520450933] [voice_hmi_node]: System prompt initialized!
[tts_node-1] [INFO] [1727372661.569303955] [tts_node]: TTS Node has been started
[voice_hmi_node-4] [INFO] [1727372661.569935850] [voice_hmi_node]: FAISS index for rosbot_xl_whoami loaded!
[voice_hmi_node-4] [INFO] [1727372661.574205157] [voice_hmi_node]: HMI Node has been started
[voice_hmi_node-4] [INFO] [1727372661.574827305] [voice_hmi_node]: Voice HMI node initialized
[voice_hmi_node-4] [WARN] [1727372661.574880541] [rcl.logging_rosout]: Publisher already registered for node name: 'voice_hmi_node'. If this is due to multiple nodes with the same name then all logs for the logger named 'voice_hmi_node' 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.
[voice_hmi_node-4] [INFO] [1727372661.608835392] [voice_hmi_node]: Creating state based agent
[voice_hmi_node-4] [INFO] [1727372661.614812770] [voice_hmi_node]: State based agent created
[asr_node-2] [INFO] [1727372662.618400281] [rai_asr]: Parameters have been initialized
[asr_node-2] Using cache found in /home/mmajek/.cache/torch/hub/snakers4_silero-vad_master
[asr_node-2] [INFO] [1727372663.855747713] [rai_asr]: ASR Node has been initialized
[asr_node-2] [INFO] [1727372667.460527449] [rai_asr]: Recording...
[asr_node-2] [INFO] [1727372668.340563252] [rai_asr]: Stopped recording. Transcribing...
[asr_node-2] [INFO] [1727372668.731429242] [rai_asr]: Transcription: Hello
[asr_node-2] [INFO] [1727372668.731743043] [rai_asr]: Done transcribing.
[asr_node-2] [WARN] [1727372668.815004960] [rai_asr]: Stream status: input overflow
[voice_hmi_node-4] [INFO] [1727372668.819112448] [voice_hmi_node]: Processing started
[voice_hmi_node-4] [INFO] [1727372668.819917492] [voice_hmi_node]: Running thinker
[voice_hmi_node-4] [INFO] [1727372669.603530285] [voice_hmi_node]: Sending message to human: "Hello! How can I assist you today?"
[voice_hmi_node-4] [INFO] [1727372669.603873320] [voice_hmi_node]: Processing finished
[tts_node-1] [INFO] [1727372669.604114778] [tts_node]: Registering new TTS job: 0 length: 5 chars.
[tts_node-1] [INFO] [1727372669.605486196] [tts_node]: Registering new TTS job: 1 length: 28 chars.
[tts_node-1] [INFO] [1727372670.804353346] [tts_node]: Job 0 completed.
[tts_node-1] [INFO] [1727372670.810662246] [tts_node]: Playing audio for job 0. /tmp/tmpsgxk8wjo.mp3
[tts_node-1] [INFO] [1727372671.244564706] [tts_node]: Job 1 completed.
[tts_node-1] [INFO] [1727372671.798606716] [tts_node]: Playing audio for job 1. /tmp/tmpeyylctqy.mp3
[asr_node-2] [INFO] [1727372675.055756999] [rai_asr]: Recording...
[asr_node-2] [INFO] [1727372678.336056381] [rai_asr]: Stopped recording. Transcribing...
[asr_node-2] [INFO] [1727372678.418838600] [rai_asr]: Transcription: What's your name? Please describe how you look.
[asr_node-2] [INFO] [1727372678.419137647] [rai_asr]: Done transcribing.
[asr_node-2] [WARN] [1727372678.501495161] [rai_asr]: Stream status: input overflow
[voice_hmi_node-4] [INFO] [1727372678.678884429] [voice_hmi_node]: Processing started
[voice_hmi_node-4] [INFO] [1727372678.679749697] [voice_hmi_node]: Running thinker
[voice_hmi_node-4] [INFO] [1727372680.678094085] [voice_hmi_node]: Sending message to human: "I am a ROSbot XL, an autonomous mobile robot platform. My structure features a robust 4x4 drive system, and I have a compact design with dimensions of 332 mm x 325 mm x 133.5 mm. My chassis is made from powder-coated aluminum, making it durable. How can I assist you further?"
[tts_node-1] [INFO] [1727372680.678585955] [tts_node]: Registering new TTS job: 2 length: 54 chars.
[voice_hmi_node-4] [INFO] [1727372680.678601151] [voice_hmi_node]: Processing finished
[tts_node-1] [INFO] [1727372680.679280268] [tts_node]: Registering new TTS job: 3 length: 123 chars.
[tts_node-1] [INFO] [1727372680.679704482] [tts_node]: Registering new TTS job: 4 length: 66 chars.
[tts_node-1] [INFO] [1727372680.680103332] [tts_node]: Registering new TTS job: 5 length: 29 chars.
[tts_node-1] [INFO] [1727372682.360962683] [tts_node]: Job 5 completed.
[tts_node-1] [INFO] [1727372682.881226861] [tts_node]: Job 4 completed.
[tts_node-1] [INFO] [1727372682.922476801] [tts_node]: Job 2 completed.
[tts_node-1] [INFO] [1727372682.932972387] [tts_node]: Playing audio for job 2. /tmp/tmp9opensng.mp3
[tts_node-1] [INFO] [1727372683.734013241] [tts_node]: Job 3 completed.
[tts_node-1] [INFO] [1727372686.796517879] [tts_node]: Playing audio for job 3. /tmp/tmp93xb1nk3.mp3
[tts_node-1] [INFO] [1727372697.506859037] [tts_node]: Playing audio for job 4. /tmp/tmplvkf08ro.mp3
[tts_node-1] [INFO] [1727372701.432316925] [tts_node]: Playing audio for job 5. /tmp/tmp4uk0dz_0.mp3
Purpose
After refactoring the hmi into text_hmi and voice_hmi the hri launchfile wasn't updated. It used deprecated hmi_node.
Proposed Changes
Removed deprecated hmi_node Removed entrypoint Altered HRI launch by replacing hmi_node with voice_hmi_node
Issues
Testing
Before
Details
(rai-py3.12) mmajek@mmajek-2204:~/projects/internal/rai$ ros2 launch rai_bringup hri.launch.py keep_speaker_busy:=false recording_device:=3 silence_grace_period:=0.5 asr_vendor:=whisper # local solution, use openai for cloud based [INFO] [launch]: All log files can be found below /home/mmajek/.ros/log/2024-09-26-19-31-30-315722-mmajek-2204-23775 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [asr_node-2]: process started with pid [23779] [INFO] [tts_node-1]: process started with pid [23778] [INFO] [rai_whoami_node-3]: process started with pid [23780] [INFO] [hmi_node-4]: process started with pid [23781] [rai_whoami_node-3] [INFO] [1727371891.222838169] [rai_whoami_node]: Robot constitution loaded from /home/mmajek/projects/internal/rai/install/rosbot_xl_whoami/share/rosbot_xl_whoami/description/robot_constitution.txt [tts_node-1] [INFO] [1727371891.475951896] [tts_node]: TTS Node has been started [hmi_node-4] [INFO] [1727371891.676725117] [hmi_node]: HMI Node has been started [rai_whoami_node-3] [INFO] [1727371891.677309639] [rai_whoami_node]: Incoming request for RAI constitution, responding [rai_whoami_node-3] [INFO] [1727371891.677932548] [rai_whoami_node]: Incoming request for RAI identity, responding [hmi_node-4] [INFO] [1727371891.678304521] [hmi_node]: System prompt initialized. [asr_node-2] [INFO] [1727371892.588345590] [rai_asr]: Parameters have been initialized [asr_node-2] Using cache found in /home/mmajek/.cache/torch/hub/snakers4_silero-vad_master [asr_node-2] [INFO] [1727371893.641983580] [rai_asr]: ASR Node has been initialized [asr_node-2] [INFO] [1727371895.887387146] [rai_asr]: Recording... [asr_node-2] [INFO] [1727371896.447344230] [rai_asr]: Stopped recording. Transcribing... [asr_node-2] [INFO] [1727371896.846737369] [rai_asr]: Transcription: Thank you. [asr_node-2] [INFO] [1727371896.847060344] [rai_asr]: Done transcribing. [hmi_node-4] [INFO] [1727371896.847623618] [hmi_node]: Handling human message [hmi_node-4] Error in StdOutCallbackHandler.on_chain_start callback: AttributeError("'NoneType' object has no attribute 'get'") [asr_node-2] [WARN] [1727371896.929970120] [rai_asr]: Stream status: input overflow [tts_node-1] [INFO] [1727371897.539227657] [tts_node]: Registering new TTS job: 0 length: 68 chars. [hmi_node-4] [INFO] [1727371897.540825822] [hmi_node]: Finished handling human message [tts_node-1] [INFO] [1727371899.023469275] [tts_node]: Job 0 completed. [tts_node-1] [INFO] [1727371899.027975026] [tts_node]: Playing audio for job 0. /tmp/tmpf1bbouax.mp3 [asr_node-2] [INFO] [1727371903.890814282] [rai_asr]: Recording... [asr_node-2] [INFO] [1727371906.210853015] [rai_asr]: Stopped recording. Transcribing... [asr_node-2] [INFO] [1727371906.297381467] [rai_asr]: Transcription: Hello, 1-2-3-4-5-6-1 [asr_node-2] [INFO] [1727371906.297648161] [rai_asr]: Done transcribing. [hmi_node-4] [INFO] [1727371906.298330040] [hmi_node]: Handling human message [hmi_node-4] Error in StdOutCallbackHandler.on_chain_start callback: AttributeError("'NoneType' object has no attribute 'get'") [asr_node-2] [WARN] [1727371906.380502357] [rai_asr]: Stream status: input overflow [hmi_node-4] You're welcome! If there's anything else you need, feel free to ask. [hmi_node-4] [hmi_node-4] > Finished chain. [hmi_node-4] Traceback (most recent call last): [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1562, in _request [hmi_node-4] response = await self._client.send( [hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^ [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1674, in send [hmi_node-4] response = await self._send_handling_auth( [hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1702, in _send_handling_auth [hmi_node-4] response = await self._send_handling_redirects( [hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1739, in _send_handling_redirects [hmi_node-4] response = await self._send_single_request(request) [hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_client.py", line 1776, in _send_single_request [hmi_node-4] response = await transport.handle_async_request(request) [hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpx/_transports/default.py", line 377, in handle_async_request [hmi_node-4] resp = await self._pool.handle_async_request(req) [hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 216, in handle_async_request [hmi_node-4] raise exc from None [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 189, in handle_async_request [hmi_node-4] await self._close_connections(closing) [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 305, in _close_connections [hmi_node-4] await connection.aclose() [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/connection.py", line 171, in aclose [hmi_node-4] await self._connection.aclose() [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_async/http11.py", line 265, in aclose [hmi_node-4] await self._network_stream.aclose() [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 55, in aclose [hmi_node-4] await self._stream.aclose() [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/anyio/streams/tls.py", line 202, in aclose [hmi_node-4] await self.transport_stream.aclose() [hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 1258, in aclose [hmi_node-4] self._transport.close() [hmi_node-4] File "/usr/lib/python3.12/asyncio/selector_events.py", line 1210, in close [hmi_node-4] super().close() [hmi_node-4] File "/usr/lib/python3.12/asyncio/selector_events.py", line 875, in close [hmi_node-4] self._loop.call_soon(self._call_connection_lost, None) [hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 795, in call_soon [hmi_node-4] self._check_closed() [hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 541, in _check_closed [hmi_node-4] raise RuntimeError('Event loop is closed') [hmi_node-4] RuntimeError: Event loop is closed [hmi_node-4] [hmi_node-4] The above exception was the direct cause of the following exception: [hmi_node-4] [hmi_node-4] Traceback (most recent call last): [hmi_node-4] File "/home/mmajek/projects/internal/rai/install/rai_hmi/lib/rai_hmi/hmi_node", line 33, in
[hmi_node-4] sys.exit(load_entry_point('rai-hmi', 'console_scripts', 'hmi_node')())
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 293, in main
[hmi_node-4] asyncio.run(run_node())
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
[hmi_node-4] return runner.run(main)
[hmi_node-4] ^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
[hmi_node-4] return self._loop.run_until_complete(task)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
[hmi_node-4] return future.result()
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 285, in run_node
[hmi_node-4] executor.spin_once()
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 899, in spin_once
[hmi_node-4] self._spin_once_impl(timeout_sec)
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 896, in _spin_once_impl
[hmi_node-4] future.result() # raise any exceptions
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/task.py", line 94, in result
[hmi_node-4] raise self.exception()
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/task.py", line 239, in __call__
[hmi_node-4] self._handler.send(None)
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 508, in handler
[hmi_node-4] await call_coroutine()
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 396, in _execute
[hmi_node-4] await await_or_execute(sub.callback, *msg_tuple)
[hmi_node-4] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/executors.py", line 111, in await_or_execute
[hmi_node-4] return callback(*args)
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 210, in handle_human_message
[hmi_node-4] asyncio.run(self.handle_human_message_async(human_ros_msg))
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
[hmi_node-4] return runner.run(main)
[hmi_node-4] ^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
[hmi_node-4] return self._loop.run_until_complete(task)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
[hmi_node-4] return future.result()
[hmi_node-4] ^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/projects/internal/rai/build/rai_hmi/rai_hmi/hmi_node.py", line 264, in handle_human_message_async
[hmi_node-4] response = await self.agent_executor.ainvoke(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/chains/base.py", line 221, in ainvoke
[hmi_node-4] raise e
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/chains/base.py", line 212, in ainvoke
[hmi_node-4] await self._acall(inputs, run_manager=run_manager)
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 1678, in _acall
[hmi_node-4] next_step_output = await self._atake_next_step(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 1472, in _atake_next_step
[hmi_node-4] [
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 1500, in _aiter_next_step
[hmi_node-4] output = await self._action_agent.aplan(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain/agents/agent.py", line 619, in aplan
[hmi_node-4] async for chunk in self.runnable.astream(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 3430, in astream
[hmi_node-4] async for chunk in self.atransform(input_aiter(), config, **kwargs):
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 3413, in atransform
[hmi_node-4] async for chunk in self._atransform_stream_with_config(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 2299, in _atransform_stream_with_config
[hmi_node-4] chunk: Output = await asyncio.create_task( # type: ignore[call-arg]
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 3383, in _atransform
[hmi_node-4] async for output in final_pipeline:
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 1451, in atransform
[hmi_node-4] async for ichunk in input:
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 5562, in atransform
[hmi_node-4] async for item in self.bound.atransform(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/runnables/base.py", line 1469, in atransform
[hmi_node-4] async for output in self.astream(final, config, **kwargs):
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 492, in astream
[hmi_node-4] raise e
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 470, in astream
[hmi_node-4] async for chunk in self._astream(
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_openai/chat_models/base.py", line 1989, in _astream
[hmi_node-4] async for chunk in super()._astream(*args, **kwargs):
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/langchain_openai/chat_models/base.py", line 776, in _astream
[hmi_node-4] response = await self.async_client.create(**payload)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/resources/chat/completions.py", line 1412, in create
[hmi_node-4] return await self._post(
[hmi_node-4] ^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1829, in post
[hmi_node-4] return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1523, in request
[hmi_node-4] return await self._request(
[hmi_node-4] ^^^^^^^^^^^^^^^^^^^^
[hmi_node-4] File "/home/mmajek/.cache/pypoetry/virtualenvs/rai-qH6Oly3A-py3.12/lib/python3.12/site-packages/openai/_base_client.py", line 1596, in _request
[hmi_node-4] raise APIConnectionError(request=request) from err
[hmi_node-4] openai.APIConnectionError: Connection error.
[ERROR] [hmi_node-4]: process has died [pid 23781, exit code 1, cmd '/home/mmajek/projects/internal/rai/install/rai_hmi/lib/rai_hmi/hmi_node --ros-args -r __node:=hmi_node --params-file /tmp/launch_params_i_v0fwaz'].
After
Details
ros2 launch rai_bringup hri.launch.py keep_speaker_busy:=false recording_device:=3 silence_grace_period:=0.5 asr_vendor:=whisper # local solution, use openai for cloud based [INFO] [launch]: All log files can be found below /home/mmajek/.ros/log/2024-09-26-19-44-20-298788-mmajek-2204-26809 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [asr_node-2]: process started with pid [26813] [INFO] [tts_node-1]: process started with pid [26812] [INFO] [rai_whoami_node-3]: process started with pid [26814] [INFO] [voice_hmi_node-4]: process started with pid [26815] [rai_whoami_node-3] [INFO] [1727372661.193480027] [rai_whoami_node]: Robot constitution loaded from /home/mmajek/projects/internal/rai/install/rosbot_xl_whoami/share/rosbot_xl_whoami/description/robot_constitution.txt [rai_whoami_node-3] [INFO] [1727372661.467455772] [rai_whoami_node]: Incoming request for RAI constitution, responding [rai_whoami_node-3] [INFO] [1727372661.467977549] [rai_whoami_node]: Incoming request for RAI identity, responding [voice_hmi_node-4] [INFO] [1727372661.520450933] [voice_hmi_node]: System prompt initialized! [tts_node-1] [INFO] [1727372661.569303955] [tts_node]: TTS Node has been started [voice_hmi_node-4] [INFO] [1727372661.569935850] [voice_hmi_node]: FAISS index for rosbot_xl_whoami loaded! [voice_hmi_node-4] [INFO] [1727372661.574205157] [voice_hmi_node]: HMI Node has been started [voice_hmi_node-4] [INFO] [1727372661.574827305] [voice_hmi_node]: Voice HMI node initialized [voice_hmi_node-4] [WARN] [1727372661.574880541] [rcl.logging_rosout]: Publisher already registered for node name: 'voice_hmi_node'. If this is due to multiple nodes with the same name then all logs for the logger named 'voice_hmi_node' 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. [voice_hmi_node-4] [INFO] [1727372661.608835392] [voice_hmi_node]: Creating state based agent [voice_hmi_node-4] [INFO] [1727372661.614812770] [voice_hmi_node]: State based agent created [asr_node-2] [INFO] [1727372662.618400281] [rai_asr]: Parameters have been initialized [asr_node-2] Using cache found in /home/mmajek/.cache/torch/hub/snakers4_silero-vad_master [asr_node-2] [INFO] [1727372663.855747713] [rai_asr]: ASR Node has been initialized [asr_node-2] [INFO] [1727372667.460527449] [rai_asr]: Recording... [asr_node-2] [INFO] [1727372668.340563252] [rai_asr]: Stopped recording. Transcribing... [asr_node-2] [INFO] [1727372668.731429242] [rai_asr]: Transcription: Hello [asr_node-2] [INFO] [1727372668.731743043] [rai_asr]: Done transcribing. [asr_node-2] [WARN] [1727372668.815004960] [rai_asr]: Stream status: input overflow [voice_hmi_node-4] [INFO] [1727372668.819112448] [voice_hmi_node]: Processing started [voice_hmi_node-4] [INFO] [1727372668.819917492] [voice_hmi_node]: Running thinker [voice_hmi_node-4] [INFO] [1727372669.603530285] [voice_hmi_node]: Sending message to human: "Hello! How can I assist you today?" [voice_hmi_node-4] [INFO] [1727372669.603873320] [voice_hmi_node]: Processing finished [tts_node-1] [INFO] [1727372669.604114778] [tts_node]: Registering new TTS job: 0 length: 5 chars. [tts_node-1] [INFO] [1727372669.605486196] [tts_node]: Registering new TTS job: 1 length: 28 chars. [tts_node-1] [INFO] [1727372670.804353346] [tts_node]: Job 0 completed. [tts_node-1] [INFO] [1727372670.810662246] [tts_node]: Playing audio for job 0. /tmp/tmpsgxk8wjo.mp3 [tts_node-1] [INFO] [1727372671.244564706] [tts_node]: Job 1 completed. [tts_node-1] [INFO] [1727372671.798606716] [tts_node]: Playing audio for job 1. /tmp/tmpeyylctqy.mp3 [asr_node-2] [INFO] [1727372675.055756999] [rai_asr]: Recording... [asr_node-2] [INFO] [1727372678.336056381] [rai_asr]: Stopped recording. Transcribing... [asr_node-2] [INFO] [1727372678.418838600] [rai_asr]: Transcription: What's your name? Please describe how you look. [asr_node-2] [INFO] [1727372678.419137647] [rai_asr]: Done transcribing. [asr_node-2] [WARN] [1727372678.501495161] [rai_asr]: Stream status: input overflow [voice_hmi_node-4] [INFO] [1727372678.678884429] [voice_hmi_node]: Processing started [voice_hmi_node-4] [INFO] [1727372678.679749697] [voice_hmi_node]: Running thinker [voice_hmi_node-4] [INFO] [1727372680.678094085] [voice_hmi_node]: Sending message to human: "I am a ROSbot XL, an autonomous mobile robot platform. My structure features a robust 4x4 drive system, and I have a compact design with dimensions of 332 mm x 325 mm x 133.5 mm. My chassis is made from powder-coated aluminum, making it durable. How can I assist you further?" [tts_node-1] [INFO] [1727372680.678585955] [tts_node]: Registering new TTS job: 2 length: 54 chars. [voice_hmi_node-4] [INFO] [1727372680.678601151] [voice_hmi_node]: Processing finished [tts_node-1] [INFO] [1727372680.679280268] [tts_node]: Registering new TTS job: 3 length: 123 chars. [tts_node-1] [INFO] [1727372680.679704482] [tts_node]: Registering new TTS job: 4 length: 66 chars. [tts_node-1] [INFO] [1727372680.680103332] [tts_node]: Registering new TTS job: 5 length: 29 chars. [tts_node-1] [INFO] [1727372682.360962683] [tts_node]: Job 5 completed. [tts_node-1] [INFO] [1727372682.881226861] [tts_node]: Job 4 completed. [tts_node-1] [INFO] [1727372682.922476801] [tts_node]: Job 2 completed. [tts_node-1] [INFO] [1727372682.932972387] [tts_node]: Playing audio for job 2. /tmp/tmp9opensng.mp3 [tts_node-1] [INFO] [1727372683.734013241] [tts_node]: Job 3 completed. [tts_node-1] [INFO] [1727372686.796517879] [tts_node]: Playing audio for job 3. /tmp/tmp93xb1nk3.mp3 [tts_node-1] [INFO] [1727372697.506859037] [tts_node]: Playing audio for job 4. /tmp/tmplvkf08ro.mp3 [tts_node-1] [INFO] [1727372701.432316925] [tts_node]: Playing audio for job 5. /tmp/tmp4uk0dz_0.mp3