概述
如題,在使用ROS的過程中(博主平臺是Arch Linux+ROS Indigo),在畫圖方面會大量用到Pyparsing這個包。但是比較坑人的一點是Pydot存在Bug(或者說Pyparsing存在bug),就是在import pydot
時會報錯:
Couldn't import dot_parser, loading of dot files will not be possible.
這個錯誤並不是Fatal性的,在Pydot源碼裏也可以看到:
/usr/lib/python2.7/site-packages/pydot.py
try:
import dot_parser
except Exception, e:
print "Couldn't import dot_parser, loading of dot files will not be possible."
可見雖然不能成功import dot_parser
,程序並沒有退出,還是可以繼續運行,只要最終程序不依賴於dot_parser
即可。
感覺pydot的作者也很無奈。。。這主要是由於pyparsing在從1.5.7升級到2造成的。
會遇到的問題
目前我碰到的主要是兩個問題:
1. ROS包rqt_graph會使用到dot_parser,如果使用2.0以上版本的pyparsing無法繪圖
2. ROS包ros-indigo-rosserial等在安裝時cmake依賴2.0以上的pyparsing,使用2.0以下版本會編譯失敗。
解決方案
解決這個問題有兩種方案:
Solution 1
第一種是降級pyparsing,不使用rqt_graph,使用rostopic list
等命令代替,目前已知產生bug程序只有rqt_graph。
方法:
建議先嚐試:
$ sudo pip install pyparsing==1.5.7
若不成功,則下載pyparsing源碼:http://sourceforge.net/projects/pyparsing/ 注意下載1.5.7版本,下載下來之後使用tar -xvzf [名字]
解壓,然後進入目錄使用
sudo python setup.py install
來安裝。
然而不得不說rqt_graph是個比較好用的工具。。。不用的話要麻煩很多,因此可以嘗試第二種方案。
Solution 2
第二種方案簡單來說就是使用pydotplus代替pydot,然後修改rqt_graph源碼來進行patch。
首先安裝pydotplus:
sudo pip install pydotplus
然後修改rqt_graph的源碼將依賴從pydot改變爲pydotplus
$vim /opt/ros/indigo/lib/python2.7/site-packages/qt_dotgraph/dot_to_qt.py
---------------------------
line 38: import pydot
改爲: import pydotplus as pydot 即可