入門操作
簡介





終端環境搭建

如果在上方安裝ROS2的時候,已經將該語句添加到~/.bashrc了,則不必再跟着這步操作了。

source /opt/ros/humble/setup.bash #将ROS2环境变量配置到当前位置
echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc #每次启动终端都会运行该句

ros2 run demo_nodes_cpp talker


用ctrl+c來進行取消程序運行

ros2 run demo_nodes_py listener


ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

命令行操作

mkdir -p 新建文件夾
rm -R 遞歸刪除(刪掉文件夾及裏面包含的文件夾及文件)
touch 新建文件
rm 刪除文件
cd ..退回上級目錄(cd 點點)


會彈提示信息,告訴我們後面要跟的參數


ros2 node list會把當前ROS2正在運行的節點列出來


ros2 node info + /節點名 可以查看目標節點的詳細情況

會彈提示信息,告訴我們後面要跟的參數



可以通過話題來顯示機器人運動的狀態

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"


ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"



ros2 bag record /turtle1/cmd_vel
ros2 bag play rosbag2_2022_04_11-17_35_40/rosbag2_2022_04_11-17_35_40_0.db3
ros2 bag record + 話題
按Ctrl+C結束,然後錄製的數據在當前終端的目錄下

如何去復現呢?
ros2 bag play + 文件夾名稱
ROS2 HelloWorld(C++)



1.創建功能包


指令就是創建ros2的功能包
ros2 pkg create + 功能包名 + --build-type(構建類型) + ament_cmake / ament_python + --dependencies(依賴) + rclcpp(ROS2的CPP客户端) + --node-name(節點名) + 節點名
ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld


源文件自動生成了,文件名和我們指定的node name是一致的。

這是自動生成的內容,但是和ROS2沒有任何關係。



如果依賴的庫不止這一個,則再回車,
xxx
再添加下一個

10行是查找包
12行是添加可執行的
add_executable 的第一個參數是 可執行文件的名字(默認和節點名一致,默認和源文件名一致) 第二個參數是源文件的名字
17行是為我們的可執行程序添加依賴 我們的可執行程序依賴於RCLCPP這個庫
22行是要為我們的可執行程序設立一個安裝目錄,創建在了當前功能包下的lib目錄,也就是 工作空間名/install/功能包名/lib
編輯配置文件之後編譯,用cd..返回ws目錄


圖標為綠色,是沒有警告也沒有錯誤
是黃色的則有警告
是紅色的則有致命錯誤

可執行二進制文件的路徑

source install/setup.bash #刷新环境变量

ros2 run pkg01_helloworld_cpp helloworld
ros2 run 功能包名稱 可執行文件名(默認和節點名一致)

編輯ROS2 C++源文件:

#include "rclcpp/rclcpp.hpp"
int main(int argc, char ** argv)
{
rclcpp::init(argc,argv);
auto node = rclcpp::Node::make_shared("helloworld_node");
RCLCPP_INFO(node->get_logger(),"hello world!");
rclcpp::shutdown();
return 0;
}




ROS2 HelloWorld(Python)

ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld
ros2 pkg create + 功能包名 + --build-type(構建類型) + ament_cmake / ament_python + --dependencies(依賴) + rclpy(ROS2的Python客户端) + --node-name(節點名) + 節點名



與node name和可執行二進制文件同名

默認這裏面已經有代碼,但是和ROS2無關,這是標準的python代碼



二進制可執行文件 映射到 源文件的main函數
如何編譯呢?

先返回上一級,來到ws目錄


有個黃色警告,但是不影響我們使用。

source ./install/setup.bash
刷新環境變量
ros2 run pkg02_helloworld_py helloworld


import rclpy
def main():
rclpy.init()
node = rclpy.create_node("helloworld_py_node")
node.get_logger().info("hello world by python!")
rclpy.shutdown()
if name == '__main__':
main()



運行優化(bash終端環境)


要使用絕對路徑


儘量不要這麼幹,ROS2有一個bug,就是不同工作空間的功能包可能會調用混亂,所以先不要搞全局的運行優化。
VScode環境搭建







看C/C++,Python,CMake,XML,YAML文件就可以代碼高亮顯示
在寫一些ROS2消息的代碼可以提供代碼補齊等操作

編寫機器人模型所要用的插件,也可以進行代碼補齊

ROS2經常生成PDF文件,可以通過這個插件來查看


ROS2插件建議等成熟之後再進行安裝

這個官方插件可以嘗試安裝

人工智能代碼補全

MarkDown高亮



雖然報錯,但是程序是可以正常運行的。(主要是vscode找不到頭文件)





"includePath": [
"${default}",
"${workspaceFolder}/**",
"/opt/ros/humble/include/**"
],

/**代表要包含該文件夾下的所有的子集


按Ctrl + `(ESC底下的按鍵)把VSCODE終端打開


--node-name也是可選參數,如果不配置,則不會有源文件,也不會有可執行文件到源文件的映射



不需要修改,已經默認生成好了

再返回WS目錄進行編譯(但是此時編譯是編譯整個WS目錄下的所有功能包)

刷新環境變量並運行





如何在一個功能包裏添加多個源文件呢?

新建一個新文件,比如hellovscode2.cpp
但是此時該文件是一個孤零零的文件,他沒有做任何的配置,對應的,編譯完之後也不會被執行。
我們想編譯執行該文件,必須配置相關的配置文件。


選中的這些用不着,可以刪掉




運行優化(colcon build)

平常會全編譯WS目錄下的文件

colcon build --packages-select xxx xxx xxx #可以指向多个包

VScode環境進階
clangd插件代碼提示(可選,但是建議)
https://colcon.readthedocs.io/en/released/index.html
由於C/C++插件在大項目裏的表現簡直拉胯的一批,所以我們選擇使用llvm裏的clangd插件來進行代碼提示。
但clangd依賴於cmake生成一個編譯信息文件,我們需要一些步驟來生成該文件。
由於ROS2沒有像ROS1那樣的一個總的規範的CMakeLists,所以配置起來沒有ROS1那麼方便。
- 配置colcon build參數
- 方法一:(不建議) 每次 編譯要用該命令:
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
等同於在cmake文件裏寫上(一般不建議改cmakelists)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)- 方法二:全局參數(更加推薦)
mkdir ~/.colcon
vim ~/.colcon/defaults.yaml
按下insert(插入)按鍵

輸入下方內容
build:
cmake-args:
- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
按下ESC,並按下:wq,然後按下Enter(回车)即可成功保存。
在編譯的時候正常用colcon build就可以自動啓用CMAKE_EXPORT_COMPILE_COMMANDS=ON參數了。
- 然後再來配置clangd插件
- 先下載clangd插件

- 下載clangd文件
按住Ctrl shift P打開搜索框
輸入clangd 找到下載語言服務器這一項目,點擊安裝clangd(請保持良好的網絡狀況)
- 接着配置clangd:
- 先下載clangd插件
禁用C/C++的代碼提示功能

如果沒有上圖的彈窗,可以進行手動關閉,依然是ctrl shift P,輸入settings然後找到如下圖的選項

找到下圖這個選項,改成disabled即可。
"C_Cpp.intelliSenseEngine": "disabled"

- 重啓clangd
然後ctrl shift P搜索clangd找到如下圖的選項(重啓clangd語言服務器前,要先colcon build)

代碼提示就正常啦

安裝其他工具
terminal
安裝terminator(選裝,因人而異,有更好用的Warp,請往下看)
sudo apt install terminator

| 快捷鍵 | 功能 | 記憶方法 |
|---|---|---|
Ctrl + Shift + E | 垂直分屏,左右分 | E = East,往東邊開一個窗口,也就是左右分 |
Ctrl + Shift + O | 水平分屏,上下分 | O = Over / Under,上下疊放 |
Ctrl + Shift + S | 隱藏/顯示滾動條 | S = Scrollbar,滾動條 |
F11 | 全屏/退出全屏 | F = Fullscreen,F11 本來就是很多軟件的全屏鍵 |
Ctrl + Tab | 在不同 pane 之間切換 | 跟瀏覽器切 Tab 類似,循環切換 |
Ctrl + L | 清屏 | L = clear 裏的 L,也可以理解成“拉到新頁面” |
Ctrl + Shift + W | 關閉當前 pane | W = Window,關當前小窗口 |
Ctrl + Shift + Q | 退出整個 Terminator | Q = Quit,退出程序 |
因為他本身的字體非常暗,所以要設置一下.
cp ~/.config/terminator/config ~/.config/terminator/config.bak
vim ~/.config/terminator/config
按一下ggdG,注意大小寫.
然後按下insert按鍵,
然後讓文件內容為:
[global_config]
title_transmit_bg_color = "#31363b"
title_transmit_fg_color = "#fcfcfc"
title_receive_bg_color = "#232629"
title_receive_fg_color = "#fcfcfc"
title_inactive_bg_color = "#232629"
title_inactive_fg_color = "#bdc3c7"
[keybindings]
[profiles]
[[default]]
use_theme_colors = False
use_system_font = False
font = Noto Sans Mono 11
background_type = solid
background_color = "#232629"
foreground_color = "#fcfcfc"
cursor_color = "#fcfcfc"
palette = "#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff"
scrollback_infinite = True
[layouts]
[[default]]
[[[window0]]]
type = Window
parent = ""
size = 920, 660
[[[child1]]]
type = Terminal
parent = window0
[plugins]
最後,按下ESC,輸入:wq保存並退出.
然後完全關閉 Terminator,再重新打開。 這個配置會做幾件事:
- 背景:接近 Konsole Breeze 的深灰,不是死黑
- 字體:接近純白,比以前亮很多
- 藍色:換成更亮的 KDE 藍
- 綠色/黃色/青色:也整體提亮
- 頂部紅色標題條:改成灰色,不再那麼刺眼
Warp Terminal(推薦,更好看,也支持分屏)
相比 Terminator,Warp Terminal 的默認外觀更現代,字體更清楚,界面也更亮堂。
最重要的是,它也支持類似 Terminator 的多 pane 分屏,所以可以作為 Terminator 的現代平替。
不過需要注意,Warp 的快捷鍵和 Terminator 不完全一樣。
- 安裝
- Ubuntu / Debian 安裝
wget -O warp-terminal.deb "https://app.warp.dev/download?package=deb" sudo apt install ./warp-terminal.deb
安裝完成後,可以在應用菜單裏打開 Warp,也可以在終端裏輸入:warp-terminal - Fedora / RHEL 安裝
如果你用的是 Fedora、RHEL、CentOS 這類發行版,可以安裝 rpm 包:wget -O warp-terminal.rpm "https://app.warp.dev/download?package=rpm" sudo dnf install ./warp-terminal.rpm
啓動方式同樣是:warp-terminal
- Ubuntu / Debian 安裝
- Warp 常用快捷鍵
| 快捷鍵 | 功能 | 記憶方法 |
|---|---|---|
Ctrl + Shift + D | 向右分屏 | D = Divide,分割出一個新的 pane,默認往右邊開 |
Ctrl + Shift + E | 向下分屏 | E = Extend Down,向下面擴展一個新的 pane |
Ctrl + Alt + 方向键 | 按方向切換 pane | 想去哪邊就按哪個方向鍵 |
Ctrl + Shift + [ | 切換到上一個 pane | [ 可以理解成往前切 |
Ctrl + Shift + ] | 切換到下一個 pane | ] 可以理解成往後切 |
Ctrl + Shift + Enter | 最大化/還原當前 pane | Enter 進入當前 pane 的專注模式 |
Ctrl + Shift + W | 關閉當前 pane | W = Window,關閉當前小窗口 |
Ctrl + Shift + T | 新建標籤頁 | T = Tab,新開一個標籤頁 |
Ctrl + PageUp | 切換到上一個標籤頁 | 類似瀏覽器切換標籤 |
Ctrl + PageDown | 切換到下一個標籤頁 | 類似瀏覽器切換標籤 |
Ctrl + L | 清屏 | L = clear 裏的 L,相當於翻到一個新頁面 |
Ctrl + = | 放大字體 | 等號旁邊通常也是加號,表示放大 |
Ctrl + - | 縮小字體 | 減號,表示縮小 |
Ctrl + 0 | 恢復默認字體大小 | 歸零,恢復默認 |
- Warp 的特點
- 默認顏值比 Terminator 高,不需要額外折騰配色
- 支持一直分屏,適合大屏幕開發
- 字體渲染比較清楚,觀感比 Terminator 亮堂
- 支持命令塊,長命令輸出看起來更清晰
- 支持 AI 功能,但不使用 AI 也可以當普通終端使用
首次打開 Warp 時可能需要聯網初始化。之後即使離線也可以作為普通終端使用,只是 AI、協作等雲端功能不能用。
如果只是想要一個傳統、穩定、輕量的終端,可以繼續用 Terminator。
如果想要更好看的界面、更現代的交互體驗,並且也需要分屏,那麼 Warp 是一個很不錯的選擇。
git

咱們的Git入門教程:Vinci機器人隊Git入門教程
ROS2體系框架




Client Library就是ROS2的客户端,比如rclcpp,rclpy。
Abstract DDS Layer是DDS抽象層,這樣DDS可以實現可插拔,可以隨便替換DDS模塊。
Intra-process API是進程內通訊API,可以提高通信效率的一類API。

