在机器人界,除了小鱼之外最老实的人竟然是Ta?

大家好,我是头发越来越少、肚子越来越大的小鱼。

要说除了小鱼外最老实,它说第二,没人敢说第一。它就是编译器,因为大多数情况下编译器不会骗人。

每天小鱼空闲时间做的最多的一节事情可能就是打开群聊来答疑了,每次看到很*鱼粉和未来鱼粉们的问题图片中都是非常喜庆的中国红(歌声响起:好运来~好运来),但此时各种警告和错误让问问题的同学一点都开心不起来。

所谓给人一条小鱼,不如给人一条大鱼,所以今天小鱼就谈一谈如何让终端从红色变成正常色。小鱼给大家总结几条步骤。

一、心态摆平不要怕

有问题不怕,解决问题的过程也是一个学习的过程。换句话说只要思想不滑坡,方法总比困难多。

二、抓住重点语句并翻译

2.1 抓重点

有时候错误来的太突然,一次就是一大串,让人头皮发麻。这个小时候耳边应该要响起小鱼的话,不要怕。

我们先学会一个技能(这个要点小鱼今天没总结,过段时间总结一下发给大家),那就是在众多错误中抓住关键词。就像打蛇要打七寸一样。

什么会是关键词,肯定是和错误有关的,举个例子:
这个bug是小鱼亲手写的,是使用自定义ROS2服务接口进行通信的。

那大家看一下错误提示,说一下重点是什么?

Traceback (most recent call last):
  File "/opt/ros/foxy/lib/python3.8/site-packages/rosidl_generator_py/import_type_support_impl.py", line 46, in import_type_support
    return importlib.import_module(module_name, package=pkg_name)
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 657, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 556, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1166, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: /home/ros2/code/town_ws/install/village_interfaces/lib/libvillage_interfaces__rosidl_generator_c.so: undefined symbol: sensor_msgs__msg__Image__init

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ros2/code/town_ws/install/village_li/lib/village_li/li4_node", line 11, in <module>
    load_entry_point('village-li==0.0.0', 'console_scripts', 'li4_node')()
  File "/home/ros2/code/town_ws/install/village_li/lib/python3.8/site-packages/village_li/li4.py", line 46, in main
    node = Li4Node()  # 新建一个节点
  File "/home/ros2/code/town_ws/install/village_li/lib/python3.8/site-packages/village_li/li4.py", line 23, in __init__
    self.borrow_server = self.create_service(BorrowMoney,"borrow_money",self.borrow_money_callback)
  File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/node.py", line 1295, in create_service
    check_for_type_support(srv_type)
  File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/type_support.py", line 29, in check_for_type_support
    msg_type.__class__.__import_type_support__()
  File "/home/ros2/code/town_ws/install/village_interfaces/lib/python3.8/site-packages/village_interfaces/srv/_borrow_money.py", line 316, in __import_type_support__
    module = import_type_support('village_interfaces')
  File "/opt/ros/foxy/lib/python3.8/site-packages/rosidl_generator_py/import_type_support_impl.py", line 48, in import_type_support
    raise UnsupportedTypeSupport(pkg_name)
rosidl_generator_py.import_type_support_impl.UnsupportedTypeSupport: Could not import 'rosidl_typesupport_c' for package 'village_interfaces'

重点是下面这两句。为什么是这两句呢?除了这两句和其他的长得不太一样的,这两句还是对上面一大串错误路径的总结性话语,就像看电影,大BOSS总是在最后出场一个样。

ImportError: /home/ros2/code/town_ws/install/village_interfaces/lib/libvillage_interfaces__rosidl_generator_c.so: undefined symbol: sensor_msgs__msg__Image__init
和
rosidl_generator_py.import_type_support_impl.UnsupportedTypeSupport: Could not import 'rosidl_typesupport_c' for package 'village_interfaces'

2.2 翻译

英语好的直接口译,英语不好的请直接打开浏览器,不要勉强自己。
为什么小鱼强烈建议 你翻译,因为这样你才会对这个错误印象,看的不用太懂,似懂非懂的样子就好。

上面两句话的意思大概就是

  • 导入错误,未定义的符号链接到sensor.msgs.msg.Image

  • rosidl_generator_py不支持的类型,不能导入rosidl_typesupport_c这个东西village_interfaces

3.求助搜索引擎

翻译完成后,老鸟大概就懂了,就是没有link上sensor_msgs这个库,编译器都说它找不到了。然后立即去查代码,很快应该就知道怎么干。

那如果自己还在新手村,还是搞不懂为什么怎么办?很简单,留下公共信息打开浏览器。

但不能一股脑地全部复制粘贴到搜索引擎,一定要过滤关键词,留下公共信息,比如小鱼这里的错误前半部分

/home/ros2/code/town_ws/install/village_interfaces/lib/libvillage_interfaces

这部分其实是小鱼电脑的目录,别人的电脑又不会有这一段,这就是无用信息。那小鱼就跳了几个关键词搜了一下:

ImportError rosidl_generator_c.so undefined symbol sensor_msgs__msg__Image__init

打开某度先搜一下,小鱼一般先连续标题右击在新标签页多打开一些页面来,毕竟加载要时间,然后再一个浏览。
在这里插入图片描述
小鱼看了一下结果,都不对,都是跟ROS2没有关系的,这个时候,你就需要加关键词了(关键词的选择是帮你进一步筛选结果的相关性),于是小鱼加了一个ROS2在标题前边。
在这里插入图片描述
打开第一个,就是发现就是小鱼遇到的错误,非常相似,只是别人的目录和我有所不同,消息类型有所不同,根据提示加上对应依赖,小鱼就成功解决问题。

其实小鱼还是走了不少的弯路,一开始没注意,一直盯着后面一个错误看UnsupportedTypeSupport,最后找到了官方示例库,在那里发现有一个兄弟也遇到了这个问题,而且比我惨多了,至今都没close
在这里插入图片描述

4.其他方法

4.1 求助群友和大佬

在搜索引擎无果的情况下,可以向群友和大佬们请教,如果小鱼有时间会很乐意给予帮助。

4.2 尝试换个搜索引擎

这里强烈推荐Google,没有Google也可以用必应。需要梯子的同学可以点阅读原文,小鱼有推荐。

4.3 看官方文档

有时候教程被别人搬来搬去,都不如官方写的清楚。但对个人能力要求稍微高点。

4.4 终极办法,直接github提出Issue

其实就是找原作者,谁写的bug,谁写的提示,谁肯定知道是发生了什么情况下自己才会给这个提示,反查代码会很快

4.5 闲鱼付费等等

这个就不说了,闲鱼上小鱼也有店哈哈哈。也是蛮坑的。

5.最后强调

还是同一句话,遇到错误不要慌,把解决它当作一次技术增进的机会。

遇到错误不应该是找到解决方法就算结束,稍微花点时间看一下为什么会错,为什么可以这么解决,知其然知其所以然。

遇到错误不要着急问,可以尝试一下小鱼的方法,你会发现搜索引擎是你最好的老师。

我是小鱼,一名在职机器人算法工程师,目前在做公众号,想和小鱼一起交流机器人技术吗?快点关注小鱼的公众号《鱼香ROS》加入鱼群吧~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值