我最近为我的苹果硅Mac制作了ROS2银河,我想在这个ROS上使用rosbridge_suite。
因此,我在rosbridge_suite文件夹下添加了src回购,并再次进行了构建。
当我使用下面的命令启动rosbridge时
ros2 launch rosbridge_server rosbridge_websocket_launch.xml我遇到了这些错误
[rosapi_node-2] Traceback (most recent call last):
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 69, in init
[rosapi_node-2] if self.__context is not None:
[rosapi_node-2] AttributeError: 'Context' object has no attribute '_Context__context'
[rosapi_node-2]
[rosapi_node-2] During handling of the above exception, another exception occurred:
[rosapi_node-2]
[rosapi_node-2] Traceback (most recent call last):
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node", line 330, in <module>
[rosapi_node-2] main()
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node", line 318, in main
[rosapi_node-2] rclpy.init(args=args)
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/__init__.py", line 76, in init
[rosapi_node-2] return context.init(args, domain_id=domain_id)
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 72, in init
[rosapi_node-2] self.__context = _rclpy.Context(
[rosapi_node-2] rclpy._rclpy_pybind11.RCLError: Failed to initialize init options: failed to load shared library 'librmw_cyclonedds_cpp.dylib' due to dlopen error: dlopen(librmw_cyclonedds_cpp.dylib, 0x0001): tried: '/opt/homebrew/lib/librmw_cyclonedds_cpp.dylib' (no such file), 'librmw_cyclonedds_cpp.dylib' (no such file), '/usr/local/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/usr/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/Users/parkjb/ros2/ros2_galactic/librmw_cyclonedds_cpp.dylib' (no such file), at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcutils/src/shared_library.c:99, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rmw_implementation/rmw_implementation/src/functions.cpp:77, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcl/rcl/src/rcl/init_options.c:75
[ERROR] [rosapi_node-2]: process has died [pid 26947, exit code 1, cmd '/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node --ros-args -r __node:=rosapi --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_vss_roak --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_7bjyom3b --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_2_8xl_3l'].和
[rosbridge_websocket-1] Traceback (most recent call last):
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 69, in init
[rosbridge_websocket-1] if self.__context is not None:
[rosbridge_websocket-1] AttributeError: 'Context' object has no attribute '_Context__context'
[rosbridge_websocket-1]
[rosbridge_websocket-1] During handling of the above exception, another exception occurred:
[rosbridge_websocket-1]
[rosbridge_websocket-1] Traceback (most recent call last):
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket", line 332, in <module>
[rosbridge_websocket-1] main()
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket", line 316, in main
[rosbridge_websocket-1] rclpy.init(args=args)
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/__init__.py", line 76, in init
[rosbridge_websocket-1] return context.init(args, domain_id=domain_id)
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 72, in init
[rosbridge_websocket-1] self.__context = _rclpy.Context(
[rosbridge_websocket-1] rclpy._rclpy_pybind11.RCLError: Failed to initialize init options: failed to load shared library 'librmw_cyclonedds_cpp.dylib' due to dlopen error: dlopen(librmw_cyclonedds_cpp.dylib, 0x0001): tried: '/opt/homebrew/lib/librmw_cyclonedds_cpp.dylib' (no such file), 'librmw_cyclonedds_cpp.dylib' (no such file), '/usr/local/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/usr/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/Users/parkjb/ros2/ros2_galactic/librmw_cyclonedds_cpp.dylib' (no such file), at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcutils/src/shared_library.c:99, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rmw_implementation/rmw_implementation/src/functions.cpp:77, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcl/rcl/src/rcl/init_options.c:75
[ERROR] [rosbridge_websocket-1]: process has died [pid 26946, exit code 1, cmd '/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket --ros-args -r __node:=rosbridge_websocket --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_0xmoxvgm --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_ot_3hvt9 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_zd34jhl5 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_den13fk1 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_53o5ojte --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_umglw4w2 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_868rt_1u --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_d70ymv3p --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_zr0nset_ --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_6axnx4vf --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_ln9ct7c_ --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_8yuje8ja'].看起来dlopen找不到到lib的路径,所以我检查了我的$DYLD_LIBRARY_PATH
/Users/parkjb/ros2/ros2_galactic/install/opt/yaml_cpp_vendor/lib:/Users/parkjb/ros2/ros2_galactic/install/opt/rviz_ogre_vendor/lib:/Users/parkjb/ros2/ros2_galactic/install/lib
我检查了dlopen在/Users/parkjb/ros2/ros2_galactic/install/lib下找到的目标dylib,但是dlopen没有搜索路径。(仅根据错误消息搜索.、/opt/homebrew/lib、/usr/local/lib、/usr/lib、~/ros2/ros2_galactic )
如何使dlopen搜索想要的路径~/ros2/ros2_galactic/install/lib
如何构建http://mamykin.com/posts/building-ros2-on-macos-big-sur-m1/ (与当前环境相同)
发布于 2022-03-08 08:40:59
解决这个错误的方法相当愚蠢,仍然需要更明确的方法来解决它。
我只是通过以下命令将~/ros2/ros2_galactic/install/lib中的整个文件和文件夹软链接到~/ros2/ros2_galactic
cd ~/ros2/ros2_galactic
ln -s install/lib/* .lol:D
编辑--也许是SIP的一个问题
在恢复模式下禁用csrutil可能有帮助。
https://stackoverflow.com/questions/71391910
复制相似问题