Wiki
工作空間與功能包
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.工作空間簡介

工作空間裡有4個子空間
未來編寫的程式碼和指令碼都需要人為的放入src空間裡,
編譯所形成的中間檔案會存放到build空間裡,
執行檔會存放到install空間裡,
編譯過程以及執行之後各種警告,錯誤資訊等會存放到log空間裡。
用pip工具可以很方便的安裝各種python的包


國內開發者@魚香ROS 開發的一個專門處理ROS2依賴的工具



實際上就是掃描了各個功能包裡的package.xml裡的depend,然後查詢本機是否含有該依賴,再決定是否安裝。
sudo rosdepc init
rosdepc update
cd ..
rosdepc install -i --from-path src --rosdistro humble -y #在src文件里看功能包所需依赖并查找安装

後面還需要建立好幾個目錄,這些目錄大多都是和介面檔案相關的。


2.原始檔編譯




#include "rclcpp/rclcpp.hpp"
class MyNode: public rclcpp::Node
{
public:
MyNode():Node("node_name")
{
RCLCPP_INFO(this->get_logger(),"hello world!");
}
};
int main(int argc,char *argv[])
{
rclcpp::init(argc,argv);
auto node = std::make_shared<MyNode>();
rclcpp::shutdown();
return 0;
}


例項化只能一個程序組織一個節點,
而繼承可以組織多個節點。




初始化和資源釋放的作用是什麼?
可以往context物件裡放資料,也可以取資料,類似於FreeRTOS裡的訊息佇列,但也不完全類似,它可以儲存之前的資料。

初始化不是僅僅只建立context物件,這是它的其中一個功能,它還有其他比較重要的功能。


先初始化父類構造,並傳入一個節點名稱。

智慧指標忘記的可以看Vinci機器人隊C/C++資料
智慧指標是一種自動管理記憶體的指標,它會在不需要物件時自動釋放記憶體。使用智慧指標可以避免記憶體洩漏和空懸指標等問題。
最安全的分配和使用動態記憶體的方法是呼叫一個名為 make_shared 的標準庫函式。 此函式在動態記憶體中分配一個物件並初始化它,返回指向此物件的 shared_ptr。與智慧指標一樣,make_shared 也定義在標頭檔案 memory 中。
當要用 make_shared 時,必須指定想要建立的物件的型別。定義方式與模板類相同, 在函式名之後跟一個尖括號,在其中給出型別:
// 指向一个值为42的int的shared_ptr
shared_ptr<int> p3 = make_shared<int>(42);
// p4 指向一个值为"9999999999"的string
shared_ptr<string> p4 = make_shared<string>(10,'9');
// p5指向一个未初始化的int
shared_ptr<int> p5 = make_shared<int>();
//当然,我们通常用 auto 定义一个对象来保存 make_shared 的结果,这种方式较为简单:
// p6指向一个动态分配的空vector<string>
auto p6 = make_shared<vector>();

用make_shared可以分配堆區記憶體。
3.配置檔案

C++

Python



name是功能包名稱
version是包的版本
description是描述包的資訊,也就是包是幹嘛的
email是維護者的郵箱地址
license是我們的功能包使用的軟體協議









不建議直接重新命名功能包的名字,當修改了資料夾名稱,則裡面很多檔案裡的配置內容也需要被修改。建議重新建。
4.常用操作命令


ament_cmake是cmake的增強版



-h 是檢視幫助資訊

ros2 pkg executables #输出当前系统可执行的功能包和节点


ros2 pkg executables 功能包名 #是输出当前包下可执行的功能包和节点

ros2 pkg list #是输出当前系统可执行的功能包

ros2 pkg prefix + 功能包名 #是输出该功能包的路径(重要,后面经常要用)


ros2 pkg xml + 功能包名 #是输出该功能包里的packages.xml的内容

5.核心模組_通訊相關


通訊模組被封裝進了功能包


比如(例子)


會搜到巨多的內容,可以用grep進一步搜尋





下載分支用 -b


有個警告,因為有兩個功能包都叫humble了
如果允許覆蓋需要加引數 --allow-overriding




也就是helloworld那樣的

6.核心模組_工具相關






命令列在某些地方比圖形化工具比較好用,在遠端登入時只能用命令列


Lanuch檔案現在在ROS2裡是一個Python檔案了。

Camera是攝像頭位置,Base_Link是車體的位置,Laser是雷射雷達的位置。
雷達檢測的距離資訊,會轉化成車體的位置資訊。




7.功能包








python是解析型語言,不用編譯,但是需要setup.py檔案,setup.py主要功能是把執行檔移動到install的。
8.ROS2技術支援
ROS2_Wiki官網:
ROS2_Wiki中文官網(ROS2維基百科現已支援簡體中文):
ROS2簡體中文社群:
http://wiki.ros.org/cn/community
ROS2外掛索引網址:
https://index.ros.org/packages/










9.ROS2應用方向
許多ROS團隊伴隨ROS成長到今日,其規模已經發展到足以被認為是獨立組織的程度了。在導航、機械臂、無人駕駛、無人機等諸多領域大放異彩,下面列出了其中的一些團隊專案,這些專案對我們以後的進階發展,也提供了指導。
ROS2社群:
https://www.ros.org/blog/community/

9.1.NAV2
Nav2專案繼承自ROS Navigation Stack。該專案旨在可以讓移動機器人從A點安全的移動到B點。它也可以應用於涉及機器人導航的其他應用,例如跟隨動態點。Nav2將用於實現路徑規劃、運動控制、動態避障和恢復行為等一系列功能。
NAV2官網:

9.2.OpenCV
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟體庫。OpenCV旨在為計算機視覺應用程式提供通用基礎架構,並加速機器感知在商業產品中的使用。OpenCV允許企業輕鬆地使用和修改程式碼。
OpenCV官網:
教程:OpenCV教程

9.3.MoveIt
MoveIt是一組ROS軟體包, 主要包含運動規劃、碰撞檢測、運動學、3D感知、操作控制等功能。它可以用於構建機械臂的高階行為。MoveIt現在可以用於市面上的大多數機械臂,並被許多大公司使用。

9.4.The Autoware Foundation
Autoware Foundation是ROS下屬的非營利組織,支援實現自動駕駛的開源專案。Autoware基金會在企業發展和學術研究之間創造協同效應,為每個人提供自動駕駛技術。
TAF官網:

9.5.F1 Tenth
F1 Tenth是將模型車改為無人車的競速賽事,是一個由研究人員、工程師和自主系統愛好者組成的國際社群。它最初於 2016 年在賓夕法尼亞大學成立,但後來擴充套件到全球許多其他機構。
F1 Tenth官網:

9.6.microROS
在基於ROS的機器人應用中,micro-ROS正在彌合效能有限的微控制器和一般處理器之間的差距。micro-ROS在各種嵌入式硬體上執行,使ROS能直接應用於機器人硬體。
MicroROS官網:

9.7.Open Robotics
Open Robotics與全球ROS社群合作,為機器人建立開放的軟體和硬體平臺,包括 ROS1、ROS2、Gazebo模擬器和Ignition模擬器。Open Robotics使用這些平臺解決一些重要問題,並通過為各種客戶組織提供軟體和硬體開發服務來幫助其他人做同樣的事情。
Open Robotics官網:

9.8.PX4
PX4是一款用於無人機和其他無人駕駛車輛的開源飛行控制軟體。該專案為無人機開發人員提供了一套靈活的工具,用於共享技術併為無人機應用程式建立量身定製解決方案。
PX4官網:

9.9.ROS-Industrial
ROS-Industrial是一個開源專案,將 ROS 軟體的高階功能擴充套件到工業相關硬體和應用程式。
