这是我在Mac上安装ROS2时遇到的一些问题及解决办法,寻找问题的思路就是多去github上耐心看issue
问题描述:
安装完成后,运行sudo ros2 run demo_nodes_cpp talker
后提示:
pkg_resources.DistributionNotFound: The ‘ros2cli==0.5.4’ distribution was not found and is required by the application
运行. ~/ros2_install/ros2-osx/setup.zsh
或. ~/ros2_install/ros2-osx/local_setup.zsh
后提示:
[connext_cmake_module] Warning: The location at which Connext was found when the workspace was built [[/Applications/rti_connext_dds-5.3.1]] does not point to a valid directory, and the NDDSHOME environment variable has not been set. Support for Connext will not be available.
[opensplice_cmake_module] Warning: The location at which OpenSplice was found when the workspace was built [[/Users/osrf/opensplice/HDE/x86_64.darwin10_clang]] does not point to a valid directory, and the OSPL_HOME environment variable has not been set. Support for OpenSplice will not be available.
解决办法: 去掉sudo
后,不再显示ros2cli
这个错误,不过显示了另一串特别长的错误:
最前边是:
Failed to load entry point ‘launch’: No module named ‘rclpy._rclpy’ _
Failed to load entry point ‘echo’: No module named ‘rclpy._rclpy’
>>> [rcutils|error_handling.c:155] rcutils_set_error_state()
This error state is being overwritten: failed to load shared library of rmw implementation…
with this new error message: failed to load library of rmw implementation…
rcutils_reset_error() should be called after error handling to avoid this.
<<<
解决办法: 对于ros2cli
的问题,是因为没有运行setup.zsh
的原因,由于我用的是zsh
,所以必须运行setup.zsh
才行,之后虽然有Warning
,但是ros2cli
的问题不存在了,每次新开一个终端都需要运行这个setup.zsh
,之后应该把它写在.zshrc
中。
解决办法: 对于rcutils_set_error_state()
的问题,我发现可能是我之前安装辅助软件不完整,重新参考官方文档:https://index.ros.org/doc/ros2/OSX-Install-Binary/ 将所有相关的软件都安装了一遍,之后就不出现这个错误了。
另外,我最初时是执行过这个setup.zsh
文件的,但是之所以没效果,那是因为我对点命令还不熟悉,官网上给出的是. ~/ros2_install/ros2-osx/setup.zsh
,但是我可能是把点丢了,导致环境没有配置成功。经过学习,原来点命令就是source
命令,可以等效通过执行source ~/ros2_install/ros2-osx/setup.zsh
来实现。
问题描述: 将setup.zsh加入到.zshrc中以后,每次启动终端都会提示上边第二个现象:[connext_cmake_module]
和[opensplice_cmake_module]
,如何解决?
解决办法: 这个问题是由于我们使用的ros2版本是Bouncy,这个版本开始,默认在二进制包中将三种RWM实现均编译进去,即rmw_fastrtps_cpp
,rmw_connext_cpp
,rmw_opensplice_cpp
,RWM是指ros middleware interfaces,这是ROS2依赖的DDS层的实现接口(具体我还说不太清),这三个模块默认ROS2只包含第一个fastrtps,另外两个需要自己额外安装,所以当我们没有安装这两个DDS时,就会在初始化环境时告诉我们RWM是有的,但找不到对应的模块软件。我认为可以忽略这个问题。
有关于这块的知识,官网https://index.ros.org/doc/ros2/DDS-and-ROS-middleware-implementations/ 描述很详细。
问题描述:
输入:ros2 run demo_nodes_py listener
提示:
ModuleNotFoundError: No module named ‘rclpy._rclpy’
无法运行,同时对于其他Python写的nodes都无法运行。
解决办法:
这个问题的原因是Python版本的问题,我安装的ros2版本是18年7月发布的release-bouncy分支https://github.com/ros2/ros2/releases/tag/release-bouncy,这个版本要求Python应该是3.7,我检查了我的版本,之前是3.6版本的。
输入
brew upgrade python
将Python升级到3.7版本后,问题解决。
最初的原因应该是当时直接使用brew install python
,然后brew检查到我安装过Python,就直接跳过了,而我当时安装的版本是3.6,从而导致了问题。
升级之后,可能会提示有些包没有安装或版本过低,按照要求安装或更新就可以。
参考:
https://github.com/ros2/ros2/issues/546
https://github.com/ros2/ros2/issues/526