实验项目做的是 ORB-SLAM2 和 LCM传输协议结合的课题。在Ubuntu14.04的系统下,配置了多次环境,但这个碰到了一个新的问题,折磨了我一段时间,就是图1中的Warning。同样的环境安装步骤,同样的代码,但是这个却翻车了。在传输过程中,接收端始终显示这个,导致丢包率太高,传输不能正常运行。

图1. LCM Warning
问题其实说的很明白了,是传输了大的packet,同时UDP的缓冲区很小。但是,就是因为同样的代码,但是在别的电脑上就不会出现这个,在别的电脑上是正常运行的。排除了代码的问题,那么想办法调大一点UDP缓冲区的大小。
LCM的作者给出了这个,http://lcm-proj.github.io/multicast_setup.html。参考链接中的办法

图2 链接中的办法
也就是去配置文件里调整缓冲区的大小。原理我没有研究过,这里简单点来看就是改个数值。
步骤就是,
sudo vim /etc/sysctl.conf, 进入配置文件。
然后在最底下放入上面的两句话,保存退出就好了。

图3 修改之后的文件
之后尝试去运行程序,还是报错。
查验资料之后,
使用 sudo sysctl -a |grep rmem_max 命令,查看rmem_max的值,

图4 查看结果
其中 net.core.rmem_max的值是212992,跟我在配置文件里设置的2097152不一样。
之后使用 sudo sysctl -p 使配置文件生效。输入命令之后,会显示出下面的两个值,可以发现,它们已经更新了。

图5 生效后
之后再使用 sudo sysctl -a |grep rmem_max 命令,查看rmem_max的值,

图6 生效后再查看
发现net.core.rmem_max的值已经更改了。
再去运行程序,LCM warning 已经不出现了,程序传输正常。