ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
Windows ros2 humble 命令卡死无反应问题
-
之前用ros2执行各种命令都没有问题,但是最近突然不能用了,各种“卡死”,一直在运行状态,也不输出,目前还找不到原因:
-
比如用 “ros2 topic list”,执行后,没有任何输出,也不退出
-
比如用 ”ros2 run demo_nodes_cpp talker”,执行后,也没有输出,也不报错,就一直运行着
以”ros2 run demo_nodes_cpp talker”为例,完整的调试信息如下:
C:\Windows\System32>ros2 run demo_nodes_cpp talker --ros-args --log-level debug [DEBUG] [1721977709.505315400] [rclcpp]: signal handler installed [DEBUG] [1721977709.505680900] [rcl]: Initializing wait set with '0' subscriptions, '2' guard conditions, '0' timers, '0' clients, '0' services [DEBUG] [1721977709.505695300] [rclcpp]: deferred_signal_handler(): waiting for SIGINT/SIGTERM or uninstall [DEBUG] [1721977709.505780700] [talker]: Load library topics_library.dll [DEBUG] [1721977709.507710000] [talker]: Instantiate class rclcpp_components::NodeFactoryTemplate<demo_nodes_cpp::Talker> [DEBUG] [1721977709.508035400] [rcl]: Couldn't parse arg 0 (C:\opt\ros2_humble\lib\demo_nodes_cpp\talker.exe) as a remap rule in its deprecated form. Error: Expecting token or wildcard, at C:\ci\ws\src\ros2\rcl\rcl\src\rcl\arguments.c:1170 [DEBUG] [1721977709.508257700] [rcl]: Initializing node 'talker' in namespace '' [DEBUG] [1721977709.508456500] [rcl]: Using domain ID of '0'
我尝试过重装ros2,重置网络,关闭防火墙,但是都没有效果,各种ros2命令还是“卡死”,不输出,不报错,也不退出,非常奇怪,有没有高手可以指导我一下,该如何破解这个问题?谢谢了!
-
-
遇到ROS 2命令执行后没有输出并且不退出的情况,可能是由于网络问题、配置问题或ROS 2本身的某些组件出现了故障。以下是一些可能的解决步骤:
1. 检查ROS 2环境变量
确保ROS 2的环境变量正确设置。可以使用以下命令来检查ROS_MASTER_URI和ROS_DOMAIN_ID等环境变量:
echo $ROS_MASTER_URI echo $ROS_DOMAIN_ID
确保
ROS_MASTER_URI
指向正确的地址,通常是http://localhost:11311
。2. 重启ROS Master
有时候ROS Master服务可能存在问题,重启它可能会有所帮助。可以使用以下命令来重启ROS Master:
ros2 run rmw_dds_common check_topic -t __master
如果上面的命令显示了
__master
话题,说明Master正在运行。否则,可以尝试手动启动它:ros2 run ros2launch master_discovery launch.py
或者,如果Master已经运行,可以尝试停止它:
ros2 run rmw_dds_common check_topic -t __master
如果Master正在运行,可以尝试杀死它:
pkill -f ros2__master
3. 清除ROS 2缓存
有时清除ROS 2的缓存也能解决问题。可以使用以下命令清除缓存:
ros2 cache clear
4. 检查防火墙和网络设置
确认防火墙或安全软件没有阻止ROS 2的相关进程。可以暂时禁用防火墙进行测试:
ufw disable
5. 检查DDS发现机制
如果使用的是Real-Time Publish/Subscribe Protocol (RTPS),确保网络配置允许RTPS Discovery机制正常工作。可以使用以下命令检查DDS Discovery:
ros2 topic echo /__discovery
观察是否有新的发现消息。
6. 检查DDS Domain ID
确保所有节点使用的Domain ID一致。可以通过以下命令查看当前的Domain ID:
echo $ROS_DOMAIN_ID
如果Domain ID不正确,可以设置正确的值:
export ROS_DOMAIN_ID=0
7. 使用更详细的日志级别
你已经在尝试使用
--log-level debug
选项,但也可以尝试使用更详细的日志级别,如trace
:ros2 run demo_nodes_cpp talker --ros-args --log-level trace
8. 检查其他系统进程
检查是否有其他ROS 2相关的进程在运行,并尝试终止它们:
ps aux | grep ros2
如果有其他ROS 2进程,请尝试终止它们:
killall -9
9. 检查ROS 2版本兼容性
确保使用的ROS 2版本与你的系统兼容。如果你使用的是Humble版本,需要确保所有依赖项和工具都是针对Humble版本构建的。
10. 重新安装ROS 2
如果以上步骤都无法解决问题,可以考虑完全卸载ROS 2,然后重新安装:
sudo apt-get remove ros-humble-* sudo apt-get autoremove sudo apt-get clean sudo rm -rf /opt/ros/humble
然后按照官方文档重新安装ROS 2。
如果问题仍然存在,请提供更多的系统信息,包括操作系统版本、ROS 2版本以及任何可能的错误日志,以便进一步诊断问题。