ROS2中解决rqt_graph不显示系统结构以及interface不能查看数据类型具体的数据结构问题
背景:
在上篇博客中,详细介绍了安装ROS的过程,参考链接:https://blog..net/zhangzhangshu/article/details/135701875
安装完成后,跟着古月大佬学习ROS2,在这个过程中,遇到了不少问题,今天这篇博客主要介绍其中的两个,以及对应的解决方案。
遇到问题及解决办法
先放上两个问题的报错内容: 问题一:rqt_graph可视化工具不能正常显示网络形态 问题二:使用interface查看数据类型具体的数据结构报错 报错内容:
Traceback (most recent call last):
File "/opt/ros/humble/bin/ros2", line 33, in
sys.exit(load_entry_point('ros2cli==0.18.7', '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/ros2interface/command/interface.py", line 35, in main
return extension.main(args=args)
File "/opt/ros/humble/lib/python3.10/site-packages/ros2interface/verb/show.py", line 201, in main
_show_interface(
File "/opt/ros/humble/lib/python3.10/site-packages/ros2interface/verb/show.py", line 148, in _show_interface
for line in _get_interface_lines(interface_identifier):
File "/opt/ros/humble/lib/python3.10/site-packages/ros2interface/verb/show.py", line 116, in _get_interface_lines
yield InterfaceTextLine(
File "/opt/ros/humble/lib/python3.10/site-packages/ros2interface/verb/show.py", line 43, in __init__
msg_spec = parse_message_string(
File "/opt/ros/humble/local/lib/python3.10/dist-packages/rosidl_adapter/parser.py", line 544, in parse_message_string
msg = MessageSpecification(pkg_name, msg_name, fields, constants)
File "/opt/ros/humble/local/lib/python3.10/dist-packages/rosidl_adapter/parser.py", line 388, in __init__
self.base_type = BaseType(
File "/opt/ros/humble/local/lib/python3.10/dist-packages/rosidl_adapter/parser.py", line 205, in __init__
raise InvalidResourceName(
rosidl_adapter.parser.InvalidResourceName: 'Spawn.srv' is an invalid message name. It should have the pattern '^[A-Z][A-Za-z0-9]*$'
问题一:rqt_graph可视化工具不能正常显示网络形态
在“理解话题”这篇教程中,教程地址:https://www.guyuehome.com/10560 ,在终端输入下面指令可以启动小海龟仿真器,
ros2 run turtlesim turtlesim_node
运行结果: ctrl + alt + t 打开一个新的终端,输入下面命令可以控制小海龟的移动。
ros2 run turtlesim turtle_teleop_key
运行结果: 下面我们希望通过rqt_graph这个可视化工具来查看整个系统的状态。 但是在终端中输入指令后,并没有看到系统的状态。
rqt_graph
运行结果如下图:
解决办法
在终端中输入下列命令:
ros2 run rqt_gui rqt_gui
运行结果: 发现这时候运行界面还是空白,此时把Node Graph 这个窗口关掉,然后根据下图依次选择。 执行结果: 通过选择不同的选项,可以看到不同层次的系统图,如下图:
问题二:使用interface查看数据类型具体的数据结构报错
在“理解服务”这篇教程中,https://www.guyuehome.com/10721,我们希望查看数据类型具体的数据结构,执行教程上的命令后,会报错。如下图: 通过报错: rosidl_adapter.parser.InvalidResourceName: 'Spawn.srv' is an invalid message name. It should have the pattern '^[A-Z][A-Za-z0-9]*$', 可以看出来报错的原因是:无效的消息名字,Spawn.srv 不符合后面的正则表达式要求的形式。解决方案: 我猜想版本更新之后,不需要.后缀来表示文件的类型,ROS应该有自己的区分办法(一点不成熟的猜想)。 类似的问题,在后面理解动作的教程中也出现了,https://www.guyuehome.com/10898 如下图: 解决之后的结果图:
小结:
在学习的过程中,总会遇到这样那样的问题,不要气馁,仔细分析,总是可以解决的,大家一起加油!