1. Eclipse配置ROS開發環境

目錄

1. 引言

2. QtCreator配置ROS環境

3. Eclipse

3.1 安裝Eclipse

3.2 ROS環境配置

3.3 配置eclipse

3.3.1 主題與風格

3.3.2 代碼檢查與格式化

3.3.3 自動補全

參考文獻


1. 引言

目前有比較多的開發環境可以配置並支持ROS,在ROS wiki:http://wiki.ros.org/IDEs中有簡單的介紹。這篇文章主要介紹在QtCreator以及在Eclipse中配置ROS開發環境的方法。作者之前一直使用的開發環境是QtCreator,但是由於QtCreator本身對重構的支持實在太弱了,而近期我對重構的需求很大,Eclipse集成了完備的重構以及單元測試工具,所以決定轉用Eclipse來作ROS開發。但是目前搜索到的教程都是比較老的Eclipse版本,軟件安裝完成後有很多問題,所以決定採用最新的Eclipse 2020.03來進行整個環境的配置。

2. QtCreator配置ROS環境

QtCreator配置ROS的開發環境是非常簡單的,只需要安裝一個ROS的插件就可以了。詳情請參考zhuoyueljl的博客。關於這一部分我就不再展開了,當時選擇用QtCreator做ROS開發也是看中了配置過程簡單這一點。

3. Eclipse

相對而言Eclipse的配置要複雜一些。先說一下環境,Ubuntu14.04/Ubuntu16.04 64bit,Eclipse2020.03,ROS indigo/kinetic,配置的eclipse版本是2020.03。我在這兩個環境下驗證了以下流程的可行性。

3.1 安裝Eclipse

Eclipse2020.03安裝是比較容易的,首先從官網https://www.eclipse.org/downloads/下載安裝包。下載之後解壓安裝包,在安裝包下有一個可執行文件eclipse-inst。右擊這個文件選擇Run(運行)即可打開Eclipse安裝界面。如果運行程序報如下圖所示的錯誤說明你需要先配置一下jdk-8。

 

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac

上面的第四條命令是選擇當前默認使用哪個版本的jdk,openjdk-8-jdk對應的編號就可以了。經過以上操作配置好openjdk-8-jdk,輸入如下命令驗證當前的版本是不是1.8。

java -version

如果配置沒有問題,以上命令的輸出類似於:

openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1~14.04-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

配置完成後再次運行上面的程序應該就正常了。

由於我們是做ROS開發,因此在安裝界面中選擇Eclipse IDE for C/C++ Developers,之後點擊INSTALL進行軟件安裝,軟件安裝速度是比較快的,一般幾分鐘就可以裝完。

爲了以後啓動方便,我們創建一個快捷方式,在控制檯輸入以下命令:

gedit .local/share/applications/eclipse.desktop

在打開的文件中輸入以下內容:

[Desktop Entry]
Name=Eclipse
Type=Application
Exec=/home/USERNAME/eclipse/cpp-2020-03/eclipse/eclipse
Terminal=false
Icon=/home/USERNAME/eclipse/cpp-2020-03/eclipse/icon.xpm
Comment=Integrated Development Environment
NoDisplay=false
Categories=Development;IDE;
Name[en]=Eclipse

可以把這個文件拷貝到桌面,這樣以後啓動eclipse就會方便很多。

3.2 ROS環境配置

配置ROS環境前我們需要有一個現成的ROS工作空間,作爲測試,你可以建立一個空的工作空間,裏面添加一個hello world的包,先編譯一下確認你的工作空間和包可以正常編譯。具體怎麼創建工作空間這裏就不介紹了,請參照ros wiki

完成了上面的操作之後打開控制檯cd到工作ROS的工作空間目錄執行以下操作:

catkin_make --force-cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_MAKE_ARGUMENTS=-j8 

其中--force-cmake表示強制編譯,編譯工具用的CDT4,這個命令會對工作空間進行編譯並在build目錄下生成兩個 .project隱藏文件,在eclipse中會用到。

打開eclipse,在菜單中選擇File-->New-->Project...打開工程創建窗口,在窗口中選擇C/C++-->Makefile Project with Existing Code,點擊Next進入下一步。在這裏我們選擇之前創建的工作空間目錄,Toolchain選擇Linux GCC,如下圖所示。之後選擇Finish完成導入。

前面的過程結束之後ROS的項目就導入到了eclipse中了,但是還需要做一些配置才能編譯運行。在工程的根節點右擊選擇最下面的Properities進入工程項目配置窗口。從左側欄單擊C/C++ Build,在這個頁面中修改編譯目錄,選擇Builder Settings標籤頁,在Build location的位置後面添加一個build,如下圖所示。

從左側欄選擇C/C++ Build-->Environment。在這個頁面添加兩個環境變量。如下圖所示。

接下來瀏覽到C/C++ General-->Paths and Symbols。在這個頁面我們要添加一下ROS的頭文件目錄,選擇Includes標籤頁下的GNU C++,點擊Add,在彈出的窗口中選擇File system從文件系統中選擇ros的目錄,添加完後如下圖所示。

添加完成後點擊Apply and Close退出工程屬性配置。

以上我們配置了編譯相關的屬性,下面配置運行相關內容。在工程根節點右擊選擇Run As-->Run Configurations...彈出運行配置窗口,雙擊左側欄中的C/C++ Application添加一個運行配置,選中這個運行配置。

在Main標籤頁下C/C++ Application中填寫要運行的可執行文件。這裏我們添加的是一個名爲hello的ROS Node的路徑,注意這裏需要添加可執行文件的名稱而不僅僅是它所在的目錄。添加完後如下圖所示。

之後切換到Environment標籤頁同樣添加兩個環境變量如下圖所示。

完成以上操作後點擊Apply應用這些修改,之後關閉配置窗口,至此ROS的環境配置就完成了。在工程根節點右擊選擇Build Project編譯工程看能否通過。之後點擊工具欄運行看hello節點能否正常運行。


提示:關於符號無法解析的問題爲後期補充,因此界面主題發生了變化。

注意即使編譯和運行沒有問題了代碼頁面可能還是會報符號無法解析的錯誤,代碼提示也沒有,特別是一些C++標準庫解析即使你等很久依然無法解析。我覺得原因是頭文件的解析還沒有結束,另外當前的配置不支持解析C++的一些高級語言特性。我在網上搜索了很多的解決方案,最終只有一種方法是可用的,那就是在工程根節點右擊選擇Properties,選擇C/C++ Build-->Settings,找到這個頁面下的Tool Settings標籤頁進行配置,但是你打開這個頁面發現根本沒有這個標籤頁!不要着急,沒有這個頁面是因爲一個配置項。點擊C/C++ Build,這裏有一個Makefile generation的配置。勾選Generate Makefiles automatically,這是你發現下面的Build directory路徑不對了而且不能修改,先不用管,點擊Apply保存配置,如下圖所示。

這時你再打開C/C++ Build-->Settings,發現已經有Tool Settings標籤頁了,選中這個標籤頁,然後選中GCC C++ Compiler下的Dialect。在Language standard選擇需要配置的C++版本,我這裏選的是C++14,如下圖所示。

完成配置後點擊Apply and Close保存配置並退出。之後你要觸發Indexer更新索引。在菜單欄選擇Window-->Preferences-->C/C++-->Indexer。在這個頁面勾選Index source and header files opened in editor,點擊Apply and close。這時eclipse開始重新解析索引,等一段時間後發現無法解析的問題解決了。但是還有最後一個問題,你需要把剛纔Makefile generation的配置裏Generate Makefiles automatically再取消勾選,不然編譯路徑就不對了。不用擔心,即使取消了勾選也不會再出現無法解析的問題。

3.3 配置eclipse

eclipse2020.03功能非常強大,前面配置ROS的環境僅限於能用而已,爲了讓我們開發更舒服,在這裏介紹一些eclipse插件的配置過程。

3.3.1 主題與風格

首先就是主題,在深色主題下代碼編寫更舒適所以我們先安裝一個深色主題。在eclipse菜單欄選擇Help-->Eclipse Marketplace...這裏可以進行插件安裝,在搜索框輸入theme回車,你會搜到Darkest Dark Theme with DevStyle這個插件,安裝它就可以讓你的eclipse變成深色主題了。等待插件安裝完成重啓eclipse。在重啓時會自動進入DevStyle的配置,在其中選擇Darkest主題即可,Editors可以選擇IntelliJIDEA Dark。後面如果你想修改主題可以到Window-->Preferences-->DevStyle中進行修改。

其次我們需要安裝cmake編輯器,不然cmake文件無法高亮。依然是在Help-->Eclipse Marketplace...裏面搜索cmake,搜索結果中安裝CMake Editor 1.14.0。注意cmake編輯器安裝完後它的語法高亮可能與黑色主題衝突,有些顏色看不清楚,你可以在菜單欄Window-->Preferences-->CMakeEd中對相應的顏色進行修改。

然後我們配置一下字體,在Window-->Preferences-->General-->Colors and Fonts中選擇Basic下面的Text Font即可對所有編輯器的字體大小,類型進行配置,選中Text Font,點擊右側的編輯即可編輯字體類型與大小。我選擇的字體類型是Monospace,字體大小爲12。

在編寫代碼是我們比較推崇的是寫doxygen風格註釋,doxygen本身是有一些關鍵字的,我們希望這些關鍵字能夠區別於普通的註釋顏色,這樣也方便我們判斷當前關鍵字書寫是否有誤。這裏我們需要配置一下才能讓doxygen關鍵字高亮。在Window -> Preferences -> C/C++ -> Editor找到Workspace Default,選擇Doxygen這樣代碼中一旦出現doxygen註釋,就會按照對doxygen註釋的高亮規則來顯示這些註釋,你可以在Window-->Preferences-->C/C++-->Editor-->Syntax Coloring頁面修改doxygen註釋的顏色。在這個頁面選擇Doxygen下面的子項目,對顏色進行修改。完成這些修改後點擊Apply and Close就可以保存這些修改了,這時候你去看一下你的doxygen註釋應該已經高亮了關鍵字。

3.3.2 代碼檢查與格式化

CppStyle這個插件用於代碼風格的自動調整以及代碼檢查。在Help-->Eclipse Marketplace...搜索cppstyle,安裝這個插件。之後在Window-->Preferences-->C/C++-->CppStyle下對這個插件進行配置。在這個頁面Clang-format用於進行代碼格式化,它可以按照一定的風格對你的代碼的格式進行修改。Cpplint是一個靜態代碼檢測工具,它會提示你你的代碼有哪些潛在的問題。clang-format和cpplint都需要先安裝,之後才能在這裏進行配置。

安裝clang-format,在控制檯輸入如下命令查看可以安裝的clang-format版本:

sudo apt-cache search clang-format

輸出結果類似於:

clang-format-3.3 - Tool to format C/C++/Obj-C code
clang-format-3.4 - Tool to format C/C++/Obj-C code
clang-format-3.5 - Tool to format C/C++/Obj-C code
clang-format-3.6 - Tool to format C/C++/Obj-C code
clang-format-3.8 - Tool to format C/C++/Obj-C code
clang-format-3.9 - Tool to format C/C++/Obj-C code

在其中選擇一個版本進行安裝:

sudo apt install clang-format-3.9

安裝完成後輸入如下命令查看clang-format安裝位置:

whereis clang-format*

在輸出結果中找到你安裝的clang-format可執行文件路徑,這個後面要用。

接下來我們安裝一下cpplint,你可以去github上下載cpplint的源碼:https://github.com/google/styleguide,下載完之後解壓放到某個目錄下。

然後就可以在eclipse中配置clang-format和cpplint了,在Window-->Preferences-->C/C++-->CppStyle頁面把clang-format的路徑添加進去,然後把cpplint的目錄指向剛纔下載的styleguide目錄下的cpplint/cpplint.py就可以了。勾選下面的Enable cpplint,Run clang-format on file save,然後點擊Apply and Close保存修改並退出。如下圖所示。

這些配置完之後每次我們保存文件的時候會觸發clang-format進行代碼格式化,觸發cpplint進行代碼檢查,檢查結果將顯示在eclipse下方的Console中。注意clang-format運行時可能會報以下錯誤:

Cannot find .clang-format or _clang-format configuration file under any level parent directories of path (/home/gavin/source/ros_ws/src/hello/src/hello.cpp).
Clang-format will default to Google style.

這是因爲clang-format找不到配置文件,所以默認選擇Google style對代碼進行格式化。因爲我比較習慣與llvm的代碼格式,所以我們需要生成一個llvm的配置文件,爲了方便我選擇在根目錄也就是“/”目錄下來生成這個配置文件,cd到根目錄,進行如下操作:

cd /
sudo su
clang-format-3.9 -style=llvm -dump-config > .clang-format

這樣clang-format就可以找到這個配置文件並使用llvm對代碼進行格式化了。還有一點cpplint的規則檢查十分嚴苛,沒幾行代碼就能檢查出一堆問題,有些問題我們可能覺得不是問題,所以需要對這些規則進行一些配置。你可以在Window-->Preferences-->C/C++-->Code Analysis中找到cpplint的配置選項,在這裏把一些你認爲不重要的選項取消掉就可以了。當然你也可以直接去改cpplint.py。

3.3.3 自動補全

有時候我們希望把一些常用的代碼段或者註釋段保存起來,在需要的時候通過敲幾個字母把一大段內容插入進來,這個功能在eclipse中叫做模板。在Window-->Preferences-->C/C++-->Editor-->Templates中你可以定義自己的模板,這裏面已經有一些內置好的木板,我們在編輯代碼時,輸入這些模板的名字,然後按Ctrl+Space就可以觸發補全操作。你可以在Window-->Preferences-->Keys中修改快捷鍵,在這個頁面搜索Content Assist,修改這個項目對應的快捷鍵就可以了。

關於eclipse的配置到這裏基本就結束了,上一張最終的效果圖:

參考文獻

在作者完成環境配置的過程中參考了大量的資源,這裏就不再一一列出了,感謝各位的指點,如果哪裏侵犯了網友的知識產權還望海涵並聯系作者刪貼。

[1]. http://ubuntuhandbook.org/index.php/2016/01/how-to-install-the-latest-eclipse-in-ubuntu-16-04-15-10/

[2]. https://blog.csdn.net/jinking01/article/details/80372445

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章