Foxy 에서 manipulation 이 작동 안합니다

원격pc와 sbc모두 foxy 가이드를 보고 설치했습니다
와플파이의 sbc는 라즈베리파이3b+ 입니다

로보티즈 사이트의 quick start guide를 보고 따라하여 와플파이를 기동하는데는 성공했으나, 이후로 TurtleBot3
를 따라하는 과정에서 오류가 발생했습니다.

우선 7.2 [Software Setup] 의 2번 블럭의
cd ~/turtlebot3_ws && colcon build --symlink-install
을 수행하는 과정에서 hardware interface 가 빌드에 실패했으며,

“findhardware_interface.cmake” in cmake_module_path this project has asked cmake to find a package configuration file provided by “hardware_interface”, but cmake did not find one. could not find a package configuration file provided by “hardware_interface” with any of the following names: hardware_interfaceconfig.cmake hardware_interface-config.cmake add the installation prefix of “hardware_interface” to cmake_prefix_path or set “hardware_interface_dir” to a directory containing one of the above files. if “hardware_interface” provides a separate development package or sdk, be sure it has been installed.

이런 메시지를 띄웠기에,

sudo apt install ros-foxy-ros2-control
을 통하여 빌드에는 성공했으나, 이어지는 7.5 [Bringup] 의 2번인
ros2 launch turtlebot3_manipulation_bringup hardware.launch.py
를 한 결과,

[INFO] [launch]: All log files can be found below /home/ubuntu/.ros/log/2022-11-22-12-35-59-742048-ubuntu-26372
[INFO] [launch]: Default logging verbosity is set to INFO
Task exception was never retrieved
future: <Task finished name=‘Task-2’ coro=<LaunchService._process_one_event() done, defined at /opt/ros/foxy/lib/python3.8/site-packages/launch/launch_service.py:274> exception=SubstitutionFailure(“executable ‘[<launch.substitutions.text_substitution.TextSubstitution object at 0xffff99f2e490>]’ not found on the PATH”)>
Traceback (most recent call last):
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/launch_service.py”, line 276, in _process_one_event
await self.__process_event(next_event)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/launch_service.py”, line 296, in __process_event
visit_all_entities_and_collect_futures(entity, self.__context))
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/visit_all_entities_and_collect_futures_impl.py”, line 45, in visit_all_entities_and_collect_futures
futures_to_return += visit_all_entities_and_collect_futures(sub_entity, context)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/visit_all_entities_and_collect_futures_impl.py”, line 45, in visit_all_entities_and_collect_futures
futures_to_return += visit_all_entities_and_collect_futures(sub_entity, context)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/visit_all_entities_and_collect_futures_impl.py”, line 45, in visit_all_entities_and_collect_futures
futures_to_return += visit_all_entities_and_collect_futures(sub_entity, context)
[Previous line repeated 3 more times]
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/visit_all_entities_and_collect_futures_impl.py”, line 38, in visit_all_entities_and_collect_futures
sub_entities = entity.visit(context)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/action.py”, line 108, in visit
return self.execute(context)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch_ros/actions/node.py”, line 417, in execute
self._perform_substitutions(context)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch_ros/actions/node.py”, line 377, in _perform_substitutions
evaluated_parameters = evaluate_parameters(context, self.__parameters)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch_ros/utilities/evaluate_parameters.py”, line 145, in evaluate_parameters
output_params.append(evaluate_parameter_dict(context, param))
File “/opt/ros/foxy/lib/python3.8/site-packages/launch_ros/utilities/evaluate_parameters.py”, line 69, in evaluate_parameter_dict
evaluated_value = perform_substitutions(context, list(value))
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/perform_substitutions_impl.py”, line 26, in perform_substitutions
return ‘’.join([context.perform_substitution(sub) for sub in subs])
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/perform_substitutions_impl.py”, line 26, in
return ‘’.join([context.perform_substitution(sub) for sub in subs])
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/launch_context.py”, line 197, in perform_substitution
return substitution.perform(self)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/substitutions/command.py”, line 94, in perform
command_str = perform_substitutions(context, self.command)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/perform_substitutions_impl.py”, line 26, in perform_substitutions
return ‘’.join([context.perform_substitution(sub) for sub in subs])
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/utilities/perform_substitutions_impl.py”, line 26, in
return ‘’.join([context.perform_substitution(sub) for sub in subs])
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/launch_context.py”, line 197, in perform_substitution
return substitution.perform(self)
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/substitutions/path_join_substitution.py”, line 45, in perform
performed_substitutions = [sub.perform(context) for sub in self.__substitutions]
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/substitutions/path_join_substitution.py”, line 45, in
performed_substitutions = [sub.perform(context) for sub in self.__substitutions]
File “/opt/ros/foxy/lib/python3.8/site-packages/launch/substitutions/find_executable.py”, line 66, in perform
raise SubstitutionFailure(“executable ‘{}’ not found on the PATH”.format(self.name))
launch.substitutions.substitution_failure.SubstitutionFailure: executable ‘[<launch.substitutions.text_substitution.TextSubstitution object at 0xffff99f2e490>]’ not found on the PATH

이런 메시지와 함께 동작에 실패했습니다

어떻게 해야 하는지 도움을 구합니다

안녕하세요,

python이 설치된 경로가 PATH에 제대로 지정되지 않은 것 같습니다.
아래는 Foxy에서 설치된 Manipulation bringup을 구동했을 때 나타나는 메세지와 PATH 정보입니다.

ubuntu@ubuntu:~/turtlebot3_ws$ ros2 launch turtlebot3_manipulation_bringup hardware.launch.py
[INFO] [launch]: All log files can be found below /home/ubuntu/.ros/log/2022-12-27-07-15-40-877855-ubuntu-2846
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [2851]
[INFO] [ros2_control_node-2]: process started with pid [2853]
[INFO] [spawner.py-3]: process started with pid [2855]
[INFO] [spawner.py-4]: process started with pid [2857]
[INFO] [spawner.py-5]: process started with pid [2859]
[INFO] [spawner.py-6]: process started with pid [2861]
[INFO] [spawner.py-7]: process started with pid [2863]
[INFO] [ld08_driver-8]: process started with pid [2865]
[robot_state_publisher-1] Parsing robot urdf xml string.
[robot_state_publisher-1] Link base_link had 8 children
[robot_state_publisher-1] Link link1 had 1 children
[robot_state_publisher-1] Link link2 had 1 children
[robot_state_publisher-1] Link link3 had 1 children
[robot_state_publisher-1] Link link4 had 1 children
[robot_state_publisher-1] Link link5 had 3 children
[robot_state_publisher-1] Link end_effector_link had 0 children
[robot_state_publisher-1] Link gripper_left_link had 0 children
[robot_state_publisher-1] Link gripper_right_link had 0 children
[robot_state_publisher-1] Link camera_link had 1 children
[robot_state_publisher-1] Link camera_rgb_frame had 1 children
[robot_state_publisher-1] Link camera_rgb_optical_frame had 0 children
[robot_state_publisher-1] Link caster_back_left_link had 0 children
[robot_state_publisher-1] Link caster_back_right_link had 0 children
[robot_state_publisher-1] Link imu_link had 0 children
[robot_state_publisher-1] Link base_scan had 0 children
[robot_state_publisher-1] Link wheel_left_link had 0 children
[robot_state_publisher-1] Link wheel_right_link had 0 children
[robot_state_publisher-1] [INFO] [1672125343.553859066] [robot_state_publisher]: got segment base_footprint
[robot_state_publisher-1] [INFO] [1672125343.554517405] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1672125343.554719316] [robot_state_publisher]: got segment base_scan
[robot_state_publisher-1] [INFO] [1672125343.554766326] [robot_state_publisher]: got segment camera_link
[robot_state_publisher-1] [INFO] [1672125343.554798592] [robot_state_publisher]: got segment camera_rgb_frame
[robot_state_publisher-1] [INFO] [1672125343.554829505] [robot_state_publisher]: got segment camera_rgb_optical_frame
[robot_state_publisher-1] [INFO] [1672125343.554859419] [robot_state_publisher]: got segment caster_back_left_link
[robot_state_publisher-1] [INFO] [1672125343.554889647] [robot_state_publisher]: got segment caster_back_right_link
[robot_state_publisher-1] [INFO] [1672125343.554918375] [robot_state_publisher]: got segment end_effector_link
[robot_state_publisher-1] [INFO] [1672125343.554947696] [robot_state_publisher]: got segment gripper_left_link
[robot_state_publisher-1] [INFO] [1672125343.554976610] [robot_state_publisher]: got segment gripper_right_link
[robot_state_publisher-1] [INFO] [1672125343.555007394] [robot_state_publisher]: got segment imu_link
[robot_state_publisher-1] [INFO] [1672125343.555036177] [robot_state_publisher]: got segment link1
[robot_state_publisher-1] [INFO] [1672125343.555065202] [robot_state_publisher]: got segment link2
[robot_state_publisher-1] [INFO] [1672125343.555093022] [robot_state_publisher]: got segment link3
[robot_state_publisher-1] [INFO] [1672125343.555121510] [robot_state_publisher]: got segment link4
[robot_state_publisher-1] [INFO] [1672125343.555151294] [robot_state_publisher]: got segment link5
[robot_state_publisher-1] [INFO] [1672125343.555179170] [robot_state_publisher]: got segment wheel_left_link
[robot_state_publisher-1] [INFO] [1672125343.555207768] [robot_state_publisher]: got segment wheel_right_link
[ros2_control_node-2] [INFO] [1672125343.584041482] [turtlebot3_manipulation]: Succeeded to open port
[ros2_control_node-2] [INFO] [1672125343.595561728] [turtlebot3_manipulation]: Succeeded to set baudrate
[ros2_control_node-2] [INFO] [1672125343.598022287] [turtlebot3_manipulation]: OpenCR Model Number 20480
[ros2_control_node-2] [INFO] [1672125343.600886503] [turtlebot3_manipulation]: Connected manipulator
[ros2_control_node-2] [INFO] [1672125343.616868884] [turtlebot3_manipulation]: Connected wheels
[ros2_control_node-2] [INFO] [1672125343.617783719] [turtlebot3_manipulation]: Ready for start
[ros2_control_node-2] [INFO] [1672125343.618905764] [turtlebot3_manipulation]: Wait for IMU re-calibration
[ros2_control_node-2] [ERROR] [DynamixelSDKWrapper] [TxRxResult] There is no status packet!
[ld08_driver-8] /dev/ttyUSB0    CP2102 USB to UART Bridge Controller
[ld08_driver-8] /dev/ttyACM0    OpenCR Virtual ComPort in FS Mode
[ld08_driver-8] FOUND LiDAR_
[ld08_driver-8] LiDAR_ started successfully 
[spawner.py-3] [INFO] [1672125345.107387805] [spawner_joint_state_broadcaster]: Waiting for /controller_manager services
[ros2_control_node-2] [INFO] [1672125346.653609021] [turtlebot3_manipulation]: Joints and wheels torque ON
[ros2_control_node-2] [INFO] [1672125346.663897157] [turtlebot3_manipulation]: Set profile acceleration and velocity to joints
[ros2_control_node-2] [INFO] [1672125346.701859849] [turtlebot3_manipulation]: Set profile acceleration and velocity to gripper
[ros2_control_node-2] [INFO] [1672125346.725918342] [turtlebot3_manipulation]: Set goal current value to gripper
[ros2_control_node-2] [INFO] [1672125346.744919674] [turtlebot3_manipulation]: System starting
[ros2_control_node-2] [INFO] [1672125346.812024767] [controller_manager]: update rate is 100 Hz
[ros2_control_node-2] [INFO] [1672125346.814448244] [controller_manager]: Loading controller 'arm_controller'
[ros2_control_node-2] [INFO] [1672125346.822546596] [turtlebot3_manipulation]: Start to read wheels and manipulator states
[ros2_control_node-2] [INFO] [1672125346.829388832] [turtlebot3_manipulation]: Start to write wheels and manipulator commands
[ros2_control_node-2] [INFO] [1672125346.876460649] [controller_manager]: Loading controller 'imu_broadcaster'
[spawner.py-6] [INFO] [1672125346.956675841] [spawner_arm_controller]: Loaded arm_controller
[ros2_control_node-2] [INFO] [1672125346.993223865] [controller_manager]: Configuring controller 'arm_controller'
[ros2_control_node-2] [INFO] [1672125346.993511107] [arm_controller]: Command interfaces are [position] and and state interfaces are [position velocity].
[ros2_control_node-2] [INFO] [1672125347.001436055] [arm_controller]: Controller state will be published at 200.00 Hz.
[ros2_control_node-2] [INFO] [1672125347.012892696] [arm_controller]: Action status changes will be monitored at 20.00 Hz.
[ros2_control_node-2] [INFO] [1672125347.051681721] [controller_manager]: Loading controller 'diff_drive_controller'
[spawner.py-5] [INFO] [1672125347.079985744] [spawner_imu_broadcaster]: Loaded imu_broadcaster
[ros2_control_node-2] [INFO] [1672125347.156987016] [controller_manager]: Loading controller 'joint_state_broadcaster'
[spawner.py-4] [INFO] [1672125347.231357683] [spawner_diff_drive_controller]: Loaded diff_drive_controller
[ros2_control_node-2] [INFO] [1672125347.261953966] [controller_manager]: Loading controller 'gripper_controller'
[spawner.py-3] [INFO] [1672125347.266691073] [spawner_joint_state_broadcaster]: Loaded joint_state_broadcaster
[ros2_control_node-2] [INFO] [1672125347.366849570] [controller_manager]: Configuring controller 'imu_broadcaster'
[ros2_control_node-2] [INFO] [1672125347.371538519] [controller_manager]: Configuring controller 'diff_drive_controller'
[ros2_control_node-2] [INFO] [1672125347.398438454] [controller_manager]: Configuring controller 'joint_state_broadcaster'
[spawner.py-7] [INFO] [1672125347.456287389] [spawner_gripper_controller]: Loaded gripper_controller
[ros2_control_node-2] [INFO] [1672125347.517410943] [controller_manager]: Configuring controller 'gripper_controller'
[ros2_control_node-2] [INFO] [1672125347.517660417] [gripper_controller]: Action status changes will be monitored at 20Hz.
[spawner.py-6] [INFO] [1672125347.520807900] [spawner_arm_controller]: Configured and started arm_controller
[spawner.py-5] [INFO] [1672125347.622160370] [spawner_imu_broadcaster]: Configured and started imu_broadcaster
[INFO] [spawner.py-6]: process has finished cleanly [pid 2861]
[spawner.py-4] [INFO] [1672125347.737390298] [spawner_diff_drive_controller]: Configured and started diff_drive_controller
[INFO] [spawner.py-5]: process has finished cleanly [pid 2859]
[spawner.py-3] [INFO] [1672125347.849712827] [spawner_joint_state_broadcaster]: Configured and started joint_state_broadcaster
[INFO] [spawner.py-4]: process has finished cleanly [pid 2857]
[spawner.py-7] [INFO] [1672125347.951461967] [spawner_gripper_controller]: Configured and started gripper_controller
[INFO] [spawner.py-3]: process has finished cleanly [pid 2855]
[INFO] [spawner.py-7]: process has finished cleanly [pid 2863]
ubuntu@ubuntu:~/turtlebot3_ws$ printenv PATH
/opt/ros/foxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin