第 2 節

入門操作

0瀏覽次數0訪問次數--跳出率--平均停留

簡介

終端環境搭建

如果在上方安裝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那麼方便。

  1. 配置colcon build參數
    1. 方法一:(不建議) 每次 編譯要用該命令:
    colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
    

      等同於在cmake文件裏寫上(一般不建議改cmakelists)
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    
    1. 方法二:全局參數(更加推薦)
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參數了。

  1. 然後再來配置clangd插件
    1. 先下載clangd插件
    2. 下載clangd文件

      按住Ctrl shift P打開搜索框
      輸入clangd 找到下載語言服務器這一項目,點擊安裝clangd(請保持良好的網絡狀況)
    1. 接着配置clangd:

禁用C/C++的代碼提示功能

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

找到下圖這個選項,改成disabled即可。

"C_Cpp.intelliSenseEngine": "disabled"

  1. 重啓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關閉當前 paneW = Window,關當前小窗口
Ctrl + Shift + Q退出整個 TerminatorQ = 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,再重新打開。 這個配置會做幾件事:

  1. 背景:接近 Konsole Breeze 的深灰,不是死黑
  2. 字體:接近純白,比以前亮很多
  3. 藍色:換成更亮的 KDE 藍
  4. 綠色/黃色/青色:也整體提亮
  5. 頂部紅色標題條:改成灰色,不再那麼刺眼
Warp Terminal(推薦,更好看,也支持分屏)

相比 Terminator,Warp Terminal 的默認外觀更現代,字體更清楚,界面也更亮堂。

最重要的是,它也支持類似 Terminator 的多 pane 分屏,所以可以作爲 Terminator 的現代平替。

不過需要注意,Warp 的快捷鍵和 Terminator 不完全一樣。

  1. 安裝
    1. Ubuntu / Debian 安裝
      wget -O warp-terminal.deb "https://app.warp.dev/download?package=deb"
      sudo apt install ./warp-terminal.deb
      

      安裝完成後,可以在應用菜單裏打開 Warp,也可以在終端裏輸入:
      warp-terminal
      
    2. 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
      
  2. 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最大化/還原當前 paneEnter 進入當前 pane 的專注模式
Ctrl + Shift + W關閉當前 paneW = Window,關閉當前小窗口
Ctrl + Shift + T新建標籤頁T = Tab,新開一個標籤頁
Ctrl + PageUp切換到上一個標籤頁類似瀏覽器切換標籤
Ctrl + PageDown切換到下一個標籤頁類似瀏覽器切換標籤
Ctrl + L清屏L = clear 裏的 L,相當於翻到一個新頁面
Ctrl + =放大字體等號旁邊通常也是加號,表示放大
Ctrl + -縮小字體減號,表示縮小
Ctrl + 0恢復默認字體大小歸零,恢復默認
  1. Warp 的特點
    1. 默認顏值比 Terminator 高,不需要額外折騰配色
    2. 支持一直分屏,適合大屏幕開發
    3. 字體渲染比較清楚,觀感比 Terminator 亮堂
    4. 支持命令塊,長命令輸出看起來更清晰
    5. 支持 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。

音乐页