状态查询
22-9-13
在使用下面的指令时
ros2 node list
ros2 server list
- 等等诸如此类的查询命令出现了貌似节点crash的问题,但是偶尔出现,导致无法百分百复刻
Traceback (most recent call last):
File "/opt/ros/humble/bin/ros2", line 33, in <module>
sys.exit(load_entry_point('ros2cli==0.18.3', 'console_scripts', 'ros2')())
File "/opt/ros/humble/lib/python3.10/site-packages/ros2cli/cli.py", line 89, in main
rc = extension.main(parser=parser, args=args)
File "/opt/ros/humble/lib/python3.10/site-packages/ros2node/command/node.py", line 37, in main
return extension.main(args=args)
File "/opt/ros/humble/lib/python3.10/site-packages/ros2node/verb/list.py", line 38, in main
node_names = get_node_names(node=node, include_hidden_nodes=args.all)
File "/opt/ros/humble/lib/python3.10/site-packages/ros2node/api/__init__.py", line 60, in get_node_names
node_names_and_namespaces = node.get_node_names_and_namespaces()
File "/usr/lib/python3.10/xmlrpc/client.py", line 1122, in __call__
return self.__send(self.__name, args)
File "/usr/lib/python3.10/xmlrpc/client.py", line 1464, in __request
response = self.__transport.request(
File "/usr/lib/python3.10/xmlrpc/client.py", line 1166, in request
return self.single_request(host, handler, request_body, verbose)
File "/usr/lib/python3.10/xmlrpc/client.py", line 1182, in single_request
return self.parse_response(resp)
File "/usr/lib/python3.10/xmlrpc/client.py", line 1354, in parse_response
return u.close()
File "/usr/lib/python3.10/xmlrpc/client.py", line 668, in close
raise Fault(**self._stack[0])
xmlrpc.client.Fault: <Fault 1: "<class 'rclpy._rclpy_pybind11.InvalidHandle'>:cannot use Destroyable because destruction was requested">
- 有趣的是,ros2 daemon status显示The daemon is running. 运行ros2 node list --no-daemon几次第一次调用什么都没有返回,然后是 2/6 个节点,然后是 6/6 个节点,然后什么都没有。重新启动守护程序已解决上述问题。所以看起来守护进程以某种方式崩溃
- 不太确定造成这种情况的根本原因,但以下任何一项都可以解决?
– 在有此问题的节点上重新启动 ros2 守护程序。
ros2 daemon stop
ros2 daemon start
ros2 daemon status
– 使用 ros2cli 作为DirectNode
ros2 node list --no-daemon
ros2 topic list --no-daemon
排查原因
后期尝试复刻时,发现可能是开启两个相同的节点并操作后导致的crash