第 3 節

工作空間與功能包

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

工作空間簡介

工作空間裏有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文件里看功能包所需依赖并查找安装

後面還需要創建好幾個目錄,這些目錄大多都是和接口文件相關的。

源文件編譯

#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可以分配堆區內存。

配置文件

C++

Python

name是功能包名稱

version是包的版本

description是描述包的信息,也就是包是幹嘛的

email是維護者的郵箱地址

license是我們的功能包使用的軟件協議

不建議直接重命名功能包的名字,當修改了文件夾名稱,則裏面很多文件裏的配置內容也需要被修改。建議重新建。

常用操作命令

ament_cmake是cmake的增強版

-h 是查看幫助信息

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

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

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

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

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

核心模塊_通信相關

通信模塊被封裝進了功能包

比如(例子)

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

下載分支用 -b

有個警告,因爲有兩個功能包都叫humble了

如果允許覆蓋需要加參數 --allow-overriding

也就是helloworld那樣的

核心模塊_工具相關

命令行在某些地方比圖形化工具比較好用,在遠程登錄時只能用命令行

Lanuch文件現在在ROS2裏是一個Python文件了。

Camera是攝像頭位置,Base_Link是車體的位置,Laser是激光雷達的位置。

雷達檢測的距離信息,會轉化成車體的位置信息。

功能包

python是解析型語言,不用編譯,但是需要setup.py文件,setup.py主要功能是把可執行文件移動到install的。

ROS2技術支持

ROS2_Wiki官網:

http://wiki.ros.org/

ROS2_Wiki中文官網(ROS2維基百科現已支持簡體中文):

http://wiki.ros.org/cn

ROS2簡體中文社區:

http://wiki.ros.org/cn/community

ROS2插件索引網址:

https://index.ros.org/packages/

ROS2應用方向

許多ROS團隊伴隨ROS成長到今日,其規模已經發展到足以被認爲是獨立組織的程度了。在導航、機械臂、無人駕駛、無人機等諸多領域大放異彩,下面列出了其中的一些團隊項目,這些項目對我們以後的進階發展,也提供了指導。

ROS2社區:

https://www.ros.org/blog/community/


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

NAV2官網:

https://navigation.ros.org/


OpenCV

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

OpenCV官網:

https://opencv.org/

教程:OpenCV教程


MoveIt

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

https://moveit.ros.org/


The Autoware Foundation

Autoware Foundation是ROS下屬的非營利組織,支持實現自動駕駛的開源項目。Autoware基金會在企業發展和學術研究之間創造協同效應,爲每個人提供自動駕駛技術。

TAF官網:

https://www.autoware.org/


F1 Tenth

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

F1 Tenth官網:

https://f1tenth.org/


microROS

在基於ROS的機器人應用中,micro-ROS正在彌合性能有限的微控制器和一般處理器之間的差距。micro-ROS在各種嵌入式硬件上運行,使ROS能直接應用於機器人硬件。

MicroROS官網:

https://micro.ros.org/


Open Robotics

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

Open Robotics官網:

https://www.openrobotics.org/


PX4

PX4是一款用於無人機和其他無人駕駛車輛的開源飛行控制軟件。該項目爲無人機開發人員提供了一套靈活的工具,用於共享技術併爲無人機應用程序創建量身定製解決方案。

PX4官網:

https://px4.io/


ROS-Industrial

ROS-Industrial是一個開源項目,將 ROS 軟件的高級功能擴展到工業相關硬件和應用程序。

https://rosindustrial.org/

音乐页