先说一下起源,项目是跟一家科研院所联合做的,他们那边使用的是Python系的,而我们这边使用的是C++系,之间的相互调用麻烦,当时就想到了使用ROS作为桥梁。
我们的环境是:Jetson Xavier NX,刷上系统后,默认的是Ubuntu 18.04,Python2.7+Python3.6,OpenCV 4.1.1,刚刚开始是使用apt-get 进行安装melodic,但是它默认是python2.7的,科研所那边使用的是python3的环境,图像传过去后,出现cv_bridge的错误。解决方案有,链接如下:
https://blog.csdn.net/weixin_42675603/article/details/107785376
科研所换了AdelaiDet,这个可以在python3.6下运行。解决了cv_bridge的问题后,运行AdelaiDet的程序时,出现错误了:
libgcc_s.so.1 must be installed for pthread_cancel to work
在这个问题上折腾了好久,这个程序如果不source cv_bridge的setup.bash的话,是能正常运行的,但是source之后(加了--extend)就出错,简单调试后,发现是在rospy调用任何函数的时候就会出现这个错误。
这个问题的核心就是在于melodic的默认py2.7,但是程序是在py3.6下运行,ROS中的消息数据转image的库(cv_bridge库)需要运行在py3.6下,单独把cv_bridge库用py36编译后的环境source变破坏原有的一些路径配置(我暂时找不到具体是哪些配置变化了,ps -ef查进程,然后到proc里对应的文件夹下cat maps | grep libgcc,发现这个库的位置是一样的,也没有错),所以,最终的解决方案只能是让整个melodic运行在py36下,这样就不存在py版本不一致的问题了。