ROS问题:terminate called after throwing an instance of ‘std::out_of_range‘

Problem:

两个节点通信的过程中,出现如下这个错误:

terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
Aborted (core dumped)

应该是内存读取溢出了,两个节点,一个是python一个是C++,python的发布topic,C++的节点负责接收,然后接收的过程中就会报错,很奇怪,一开始还以为是两种语言写的ROS 节点有问题,导致通信过程中断开,但是后来请教了其他人,发现不少人的项目也是同时存在python和C++的节点,他们通信就没有问题,继续探究发现,其实是python 节点会发送一些空的数据给C++的节点,这就导致这个节点直接core dumped掉。

Solution:

解决办法也很简单
注意两点:

  1. 让python的节点不要发布空的topic信息,如下就是空的消息
will@will-OptiPlex-9010:~$ rostopic echo /yd_s 
layout: 
  dim: []
  data_offset: 0
data: []
---
layout: 
  dim: []
  data_offset: 0
data: []
---
layout: 
  dim: []
  data_offset: 0
data: []
---

正常应该持续发布这样的:

---
layout: 
  dim: []
  data_offset: 0
data: [-0.519131960177, 2.91509369261, 1.22955885924, 0.164872010129, 0.113212113622, -0.000487447682121, 0.9614643809042873]
---
layout: 
  dim: []
  data_offset: 0
data: [-0.519131960177, 2.91509369261, 1.22955885924, 0.164872010129, 0.113212113622, -0.000487447682121, 0.9614643809042873]
---
layout: 
  dim: []
  data_offset: 0
data: [-0.519131960177, 2.91509369261, 1.22955885924, 0.164872010129, 0.113212113622, -0.000487447682121, 0.9614643809042873]
---
  1. 在publish信息,并且等待callback数据的时候,不要发布超过python里面的取值范围
    比如,python里面存在10-20这10个数,c++节点发布一个1对应callback回来一个python里面10,发10得到一个回传的20,这时就不要发布11或2999这些超过它范围的值,会让python返回一个空的topic信息,这也会导致core dumped

一开始search这个问题的时候,也没有找到很对应的,毕竟造成这种报错的原因千奇百怪,只能自己慢慢分析,缩小问题的范围,才能找到解决办法。

加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值