前言
之前用RoboWare Studio
,但是它已經很久沒有更新了,官網也沒有了。Kinect版本也快不用了,趁這個機會,正好開始用VScode.
基本介紹
官方教程:
https://code.visualstudio.com/docs
其他:
https://www.jianshu.com/p/11554732b323
https://www.cnblogs.com/shujuan841019/p/5501083.html
插件及小技巧
插件
https://blog.csdn.net/weixin_45601379/article/details/100550421
https://blog.csdn.net/qq_41139830/article/details/85221330
https://www.jianshu.com/p/3eebde5748a6
小技巧
https://www.cnblogs.com/shujuan841019/p/5501083.html
https://www.jianshu.com/p/0cf2130d1b27
vscode安裝與ROS插件相關
從官網下載並安裝。
https://code.visualstudio.com/
- 中文模式。在vs code左側選擇Extenxions,輸入chinese,安裝簡體中文包。
- ros插件上。我選擇了MS的預覽版。
網上人很多選了ajshort的版本,但是這個版本已經deprecated. 並且被MS版兼併,雖然MS版還不是很完善。 - c++配置。在Extenxions裏面,輸入c++,安裝c/c++ 及 C++ Intellisense 這兩個。
- 配置CMakeLists.txt文件語法高亮。在Extenxions裏面,輸入txt,安裝Txt Syntax。
- 配置msg, srv, action語法高亮。在Extenxions裏面,輸入msg,安裝Msg Language Support。
參考鏈接:https://blog.csdn.net/MSNH2012/article/details/100512253
創建工作空間及功能包
工作空間
- 如果已經有工作空間,可以通過
打開文件夾
選項進行打開。 - 如果要新建工作空間,可以先
創建文件夾
輸入文件夾名稱,例如:test,點擊確定。 - 然後再創建文件夾
src
. - 點擊"終端"–>“新建終端”,在終端中輸入"catkin_make",系統會自動在test文件夾下創建 “build”, "devel"文件夾和其他配置文件。
在新建工作空間
時,會在test目錄下自動生成一個.vscode
文件夾,其內自動有2個.json
文件。c_cpp_properties.json
和setting.json
如果沒有生成,重啓vscode試試。
或者通過按Ctrl + Shift + P,輸入c/c++: edit configurations(JSON), 手動生成.
另外,記得把新建的工作空間source一下。
查看工作空間情況
$ echo $ROS_PACKAGE_PATH
功能包
右鍵
點擊"src"文件夾,右鍵彈出選項中,點擊"Create Catkin Package",輸入包的名稱ros_test,按Enter確認,輸入包的依賴“std_msgs roscpp”,空格隔開,按Enter確認。系統自動創建CMakeLists.txt及package.xml文件。
也可通過按Ctrl + Shift + P
,輸入ros:Create Catkin Package
配置功能包。
注:沒有在創建工作空間時的兩個.json文件,是無法生成功能包的。可能會沒反應或報錯如下:
命令"ROS: Create Catkin Package"導致錯誤 (command ‘ros.createCatkinPackage’……
運行節點
- 啓動roscore:通過按
Ctrl + Shift + P
,輸入ros:start core
啓動roscore。 - 運行節點:通過按
Ctrl + Shift + P
,輸入ros:run a rose executable
,依次輸入對應的package及節點,參數。或者直接下終端rosrun ………………
斷點調試配置
在未配置過調試前,沒有launch.json
文件。通過Ctrl + Shift + D
,下拉添加配置,自動生成該文件。斷點調試有如下幾種方式,這裏主要講c/c++ gdb啓動
:
c/c++ gdb啓動
先說一下,使用這種調試方法,不需要先運行節點。
該方式會生成launch.json
:
{
"name": "(gdb) 啓動",
"type": "cppdbg",
"request": "launch",
"program": "輸入程序名稱,例如 ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "爲 gdb 啓用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
需要修改其中program
爲需要調試的可執行程序。更改爲編譯後的可執行文件的路徑下的文件(需要二進制文件),對應ROS通過catkin_make生產可執行文件的路徑通常在 /devel/lib/ 下,後面跟上你設置好的package名和可執行文件名例如:
"program": "${workspaceFolder}/devel/lib/ros_test/talker"
需要注意,有些教程用了${workspaceRoot}/devel/lib/ros_test/talker
, 自己看哪個可行。
另外,這裏的"request": "launch"
,系統也提示我可以用"request": "attach"
模式,但是我變成attach後,系統又提示我無法識別了。。
然後:
- 啓動roscore:通過按
Ctrl + Shift + P
,輸入ros:start core
啓動roscore。 - 設置斷點,運行調試
- 如果系統像沒有斷點一樣運行,需要配置一下。在
CMakeLists.txt
中,project
後添加參數SET(CMAKE_BUILD_TYPE Debug)
,然後重新catkin_make:
cmake_minimum_required(VERSION 2.8.3)
project(ros_test)
SET(CMAKE_BUILD_TYPE Debug)
或者是catkin_make在編譯功能包時,添加catkin_make的參數
$ catkin_make -DCMAKE_BUILD_TYPE=Debug
如果工作空間下由多個功能包,可以在編譯時添加-DCATKIN_WHITELIST_PACKAGES
編譯指定功能包
$ catkin_make -DCMAKE_BUILD_TYPE=Debug -DCATKIN_WHITELIST_PACKAGES="package1;package2"
另外,如果開始斷點調試時,出現報錯:
poll failed with error Interrupted system call
解決方法是:
打開~/.gdbinit(如果沒有這個文件則自己新建一個同名文檔),然後添加一下三行即可。
set target-async 1
set pagination off
set non-stop on
該報錯參考鏈接:
https://blog.csdn.net/ABC_ORANGE/article/details/102665792
ros_attach調試方法
attach調試方法的優勢
https://blog.csdn.net/hello_crayon/article/details/40350291
參考鏈接:
https://blog.csdn.net/Kalenee/article/details/103828448
- 新建configuration設置. 通過添加配置,在.vscode的launch.josn中添加ROS: Attach
- 編譯程序(生成類型必須爲RelWithDebInfo)。在
CMakeLists.txt
中,project
後添加參數SET(CMAKE_BUILD_TYPE RelWithDebInfo)
- 通過按
Ctrl + Shift + P
,輸入>ros::run運行節點程序(也可以手動運行,需要加載環境) - 運行ROS:Attach,選擇運行程序(選擇c++/python,及節點名稱)進入斷點調試模式。可能有個需要有個確認及授權。
我在這裏運行時,還是會出現’poll failed with error Interrupted system call’,但是不影響調試。
另外就是,我這裏變量顯示的不太正常。但上面那種方式就沒問題。
注意,使用這種方法,就不需要launch.json
的配置了。
多文件調試ros_launch
參考鏈接:
https://blog.csdn.net/Kalenee/article/details/103828448
- 創建launch文件,調用調試的節點
- 在.vscode的launch.josn添加ROS: Launch,"target"設置爲launch文件的絕對路徑。可右鍵launch文件,獲得其文件路徑。
- 運行ROS:Launch,選擇運行程序進入斷點調試模式
另外,查到一個比較官方的方法介紹,有興趣的可以看一下:
http://www.lib4dev.in/info/MrGnomes/VS_Code_ROS/186882206#3-intellisense
其中還對c_cpp_properties.json
裏的includePath
做了介紹。
.json文件介紹
在我的使用中,一共用到了三個.json文件:
c_cpp_properties.json、setting.json、launch.json
其中,
c_cpp_properties.json
主要是includePath
參數,當有自定義頭文件時,需要在其內添加。setting.json
主要是ROS使用python編程,python相關配置,以及其它配置。我這裏沒有做出改動。launch.json
是在配置調試模式時需要的,C++ 啓動
模式下,需要更改program
參數;ros_launch
模式下,需要更改target
參數。- 另外,其他教程中由
task.json
,我這裏並未使用。可能是因爲我都是手動catkin_make
參考鏈接:
https://blog.csdn.net/weixin_35695879/article/details/85254422
https://blog.csdn.net/MSNH2012/article/details/100567640
https://blog.csdn.net/ABC_ORANGE/article/details/102665792
https://code.visualstudio.com/docs/cpp/config-linux