在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ROS操作系統學習筆記3

jf_78858299 ? 來源:機器人網 ? 作者:機器人網 ? 2023-05-19 17:37 ? 次閱讀

摘要:這篇文章主要介紹ROS常用工具、ROSPY和ROSCPP常用模塊,完全看完三篇文章,可以說ROS就基本入門,可以自己動手做實驗了。

ROS常用工具

ROS工具的 功能大概有以下幾個方向:仿真、調試、可視化。這里主要介紹常用工具作用,如何添加模塊,設置參數B站都有視頻,這里不會有過多解讀。

gazebo是一種最常用的機器人仿真工具,模擬器,也是目前獨立的開源機器人仿真平臺。gazebo可以進行機器人的動力學仿真,可以模仿機器人常用的傳感器(比如激光雷達、攝像頭、IMU等),也可以加載自定義的環境和場景。

RViz是可視化工具,是將接收到的信息呈現出來;rviz和gazebo非常相似,但是gazebo實現的是仿真,提供一個虛擬世界,RVIZ實現的是可視化,呈現接收到的信息。

rqt主要作用和RVIZ一致都是可視化,有了它我們可以直觀的看到消息的通信架構和流通路徑;

常用命令:

rqt_graph :顯示通信架構

rqt_plot :繪制曲線

rqt_console :查看日志

rosbag是一套用于記錄和回放ROS主題的工具,此外還提供代碼API,對包進行操作編寫。

常用命令:cheak 確定一個包是否可以在當前系統中進行,或者是否可以遷移。decompress 壓縮一個或多個包文件。filter 解壓一個或多個包文件。fix 在包文件中修復消息,以便在當前系統中播放。help 獲取相關命令指示幫助信息info 總結一個或多個包文件的內容。play 以一種時間同步的方式回放一個或多個包文件的內容。record 用指定主題的內容記錄一個包文件。reindex 重新索引一個或多個包文件。

rosbridge是一個用在ROS系統和其他系統之間的一個功能包,就像是它的名字一樣,起到 一個"橋梁"的作用,使得ros系統和其他系統能夠進行交互.Rosbridge為非ROS程序提供了 一個JSON API,有許多與Rosbridge進行交互的前端,包括一個用于Web瀏覽器交互的 WebSocket服務器。Rosbridge_suite是一個包含Rosbridge的元程序包,用于Rosbridge 的各種前端程序包(如WebSocket程序包)和幫助程序包。

moveit它融合了研究者在運動規劃、操縱、3D感知、運動學、控制和導航方面的最新進展,為操作 者提供了一個易于使用的平臺,使用它可以開發先進的機器人應用,也被廣泛應用于工業, 商業,研發和其他領域。move結構圖如下:

圖片

roscpp代碼演示

ROS為我們機器人開發者提供了不同語言的 接口,比如roscpp是C++語言ROS接口(目前最廣泛應用的ROS客戶端庫,執行效率高),rospy是python語言的ROS接口(開發效率高,通常用在對運行時間沒有太大要求的場合,例如配置、初始化等操作),rosjava是java語言的ROS接口(測試版本) 我們直接調用它所 提供的函數就可以實現topic、service等通信功能。

圖片

roscpp位于 /opt/ros/kinetic 之下,用C++實現了ROS通信。在ROS中,C++的代碼是通過 catkin這個編譯系統(擴展的CMake)來進行編譯構建的。每一個node的節點功能可能不一樣,但是都包含初始化、銷毀、句柄等操作。

  • ROS代碼邏輯整體

常見的ros代碼邏輯包含下面的執行步驟:

1.調用ros::init()函數初始化節點的名稱和其他信息

2.創建ros::NodeHandle對象,也就是節點句柄,用于創建Pub、Sub(NodeHandle就是節點資源的描述,需要借助“把手”才能操作資源)

3調用ros::shutdown()手動關閉節點(一般是系統自動幫我們完成)。

#include
int main(int argc, char** argv)
{
ros::init(argc, argv, "your_node_name");
ros::NodeHandle nh;
//....節點功能
//創建話題的publisher
ros::Publisher advertise(const string &topic, uint32_t queue_size, bool latch=false);
//創建話題的subscriber
ros::Subscriber subscribe(const string &topic, uint32_t queue_size, void(*)(M));
//創建服務的server,提供服務
ros::ServiceServer advertiseService(const string &service, bool(*srv_func)(Mreq &, Mre
s &));
//創建服務的client
ros::ServiceClient serviceClient(const string &service_name, bool persistent=false);
//查詢某個參數的值
bool getParam(const string &key, std::string &s);
bool getParam (const std::string &key, double &d) constbool getParam (const std::string &key, int &i) const//給參數賦值
void setParam (const std::string &key, const std::string &s) constvoid setParam (const std::string &key, const char *s) const;
void setParam (const std::string &key, int i) const;
//....
ros::spin();//用于觸發topic、service的響應隊列
return 0;
}

roscpp的主要部分包括:ros::init() : 解析傳入的ROS參數,創建node第一步需要用到的函數ros::NodeHandle : 和topic、service、param等交互的公共接口ros::master : 包含從master查詢信息的函數ros::this_node:包含查詢這個進程(node)的函數ros::service:包含查詢服務的函數****ros::param:包含查詢參數服務器的函數,而不需要用到NodeHandleros::names:包含處理ROS圖資源名稱的函數

具體可見:http://docs.ros.org/api/roscpp/html/index.html

以上功能可以分為以下幾類:Initialization and Shutdown 初始與關閉Topics 話題Services 服務Parameter Server 參數服務器Timers 定時器NodeHandles 節點句柄Callbacks and Spinning 回調和自旋(或者翻譯叫輪詢?)Logging 日志Names and Node Information 名稱管理Time 時鐘Exception 異常

  • 回調函數與spin()方法

    CallBack回調函數與ros::spin() 方法需要配合使用,當消息傳來時,只指定回調函數,系統不會自動觸發,必須要 ros::spin() 或 者 ros::spinOnce() 才能真正使回調函數生效。 處理流程:回調函數一般作為參數傳到另外一個函數(一般是函數指針),當消息message到達時,先會把消息放到一個隊列中,當有spin函數執行時,就會處理消息隊列隊首的信息。spin具體的處理方法可以分成阻塞/非阻塞,單線程/多線程兩種。

    spin方法 阻塞 線程
    ros::spin() 阻塞 單線程
    ros::spinOnce() 非阻塞 單線程
    ros::MultiTreadedSpin() 阻塞 多線程
    ros::AsyncMultiThreadedSpin() 非阻塞 多線程
  • ROS節點編寫

    基本流程,首先創建一個工作空間workplace,然后根據實際需要創建相應的包package,編寫相應的需求文件,如源文件;根據編譯運行需要,補充CMakeLists.txt、package.xml相應說明,如添加依賴,查找相關包,運行所需要的包,消息類型等等。

    mkdir -p xxx_ws   //創建工作空間
    catkin_make     //編譯工作空間
    //打開.bashrc 設置xxx_ws工作空間的環境變量
    catkin_create_pkg xxxx(包) xx(依賴)   //創建包
    
  1. 編寫一個talker的node

在工作空間的src/目錄下,第1步,創建一個talker的包study:$ catkin_create_pkg study roscpp第2步,打開vcode(或者其他ide),study/src,創建源文件study_node.cpp,代碼如下:

#include"ros/ros.h"
#include"std_msgs/String.h"
#include
//編寫一個node并發布出來
int main(int argc,char **argv){
   ros::init(argc,argv,"study_talker");//定義node的屬性
   ros::NodeHandle n;//ros提供的一個類,可以實例化publisher,進行發布數據
   ros::Publisher study_pub=n.advertise

第3步,設置CMakeLists.txt&package.xmlCMakeLists.txt:

find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)//告訴系統編譯本包時,需要找到這兩個包

catkin_package(
# INCLUDE_DIRS include
# LIBRARIES study
CATKIN_DEPENDS roscpp std_msgs
# DEPENDS system_lib
)//聲明依賴本包同時需要里面這兩個ros包

add_executable(${PROJECT_NAME}_node src/study_node.cpp)//編譯本包生成的可執行文件

add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})//鏈接可執行文件和依賴庫

//一般情況而已,CMakeLists.txt是創建包同時,系統自動生成的,然后,我們需要的工作,一般情況就是把上面基本地方去掉#號就行了(目的告訴系統,關于該包,在哪,依賴是啥)

package.xml:

roscppclass="hljs-name"build_depend>
std_msgsclass="hljs-name"build_depend>
roscppclass="hljs-name"exec_depend>
std_msgsclass="hljs-name"exec_depend>
//主要修改類似樣式,當然,本例子比較簡單,系統生成的,不需要做其他修改,但是,如果節點添加新的依賴,需要在這些地方添加相應的包

第4步,編譯

$ catkin_make  #注意在要做工作空間的一級目錄下使用該指令

第5步,驗證,終端運行

$ roscore & #后臺運行一個ROS master
$ rosrun study study_node & #后臺運行包名+節點名
$ rostopic list #
/study_topic //表示定義的topic正常發布
/rosout
/rosout_agg
$ rostopic echo #查看study_topic
data: "hello study world!2360"//表示發布成功
---
data: "hello study world!2361"

這時,從零開始創建的talker節點node,成功創建完成

  1. 編寫一個listener的node

在工作空間的src/目錄下,第1步,創建一個listener的包study_listen:

$ catkin_create_pkg study_listen roscpp

第2步,study_listen/src,創建源文件study_listen_node.cpp

#include"ros/ros.h"
#include"std_msgs/String.h"

//創建一個listener的node
void studyCallback(const std_msgs::String::ConstPtr& msg){
   //回調函數一定是要求是無返回類型
   ROS_INFO("I can see you again,%s",msg->data.c_str());
}

int main(int argc,char ** argv){
   ros::init(argc,argv,"study_listener");//初始化這么一個node
   ros::NodeHandle n;//命名空間
   ros::Subscriber sub=n.subscribe("study_topic",10,studyCallback);
   //表示聆聽study_topic這個主題,每次聽到就會啟動回調函數,這里的10也表示一個緩沖數量,多了,前面的會被是放掉
   //這里一定要注意,聆聽的topic一定要和發布的topic的名稱對應上,否則,是沒辦法接收的
   ros::spin();
   return 0;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 仿真
    +關注

    關注

    50

    文章

    4114

    瀏覽量

    133826
  • 調試
    +關注

    關注

    7

    文章

    587

    瀏覽量

    34021
  • ROS
    ROS
    +關注

    關注

    1

    文章

    279

    瀏覽量

    17043
收藏 人收藏

    評論

    相關推薦

    嵌入式Linux操作系統學習規劃,不看肯定后悔

    嵌入式Linux操作系統學習規劃,不看肯定后悔
    發表于 04-28 06:22

    探討嵌入式操作系統

    嵌入式操作系統學習筆記
    發表于 10-27 06:56

    嵌入式Linux操作系統學習內容及目標

    嵌入式Linux操作系統學習內容及目標:Linux介紹、使用Linux操作(命令)、Linux開發工具(會用!!夠用!!)嵌入式系統課程學習儲備知識:C語言(累計代碼量
    發表于 11-05 08:35

    嵌入式Linux操作系統學習規劃

    嵌入式Linux操作系統學習規劃ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟件開發目標:(1) 掌握主流嵌入式微處理器的結構與原理(初步定為arm9)(2) 必須掌握一個嵌入式
    發表于 11-05 06:45

    UCOSII操作系統的簡介

    前言這是我將UCOSII操作系統移植在STM32單片機上后進行UCOSII操作系統學習的一些筆記與理解,此文最后會附上我自己在UCOSII操作系統下使用STM32寫
    發表于 01-12 06:00

    ROS是什么?機器人操作系統ROS的介紹

    Robotics Foundation,Inc) 公司維護的開源項目。 1、首先是一個操作系統 根據 wikipedia 定義,操作系統是用來管理計算機硬件與軟件資源,并提供一些公用的 服務的系統軟件。而
    發表于 09-13 17:23 ?14次下載
    <b class='flag-5'>ROS</b>是什么?機器人<b class='flag-5'>操作系統</b><b class='flag-5'>ROS</b>的介紹

    ROS的含義與機器人操作系統ROS的介紹

    Operating System 的縮寫,原本是斯坦福大學的一個機器人項目,后來由 WillowGarage 公司發展,目前由 OSRF(Open Source Robotics Foundation,Inc)公司維護的開源項目。 1、首先是一個操作系統 根據 wikipedia 定義,
    發表于 09-26 14:08 ?12次下載

    機器人操作系統ROS詳細介紹

    機器人操作系統ROS詳細介紹 ROS( 機器人 操作系統,RobotOperatingSystem),是專為機器人軟件開發所設計出來的一套電腦操作系
    發表于 11-18 18:09 ?2422次閱讀

    嵌入式操作系統學習筆記

    嵌入式操作系統學習筆記
    發表于 10-20 13:51 ?3次下載
    嵌入式<b class='flag-5'>操作系統學習</b><b class='flag-5'>筆記</b>

    嵌入式系統學習筆記

    嵌入式系統學習筆記https://app.yinxiang.com/fx/97dd59b5-21f1-470c-969c-d3509ee38fce
    發表于 10-20 19:50 ?0次下載
    嵌入式<b class='flag-5'>系統學習</b><b class='flag-5'>筆記</b>

    51操作系統學習筆記(三):建立一個屬于自己的AVR的RTOS(1)

    這篇筆記雖然是“51操作系統學習筆記”,但沒有找到合適的代碼。用楊明記的感覺還有點難度。因而轉學《建立一個屬于自己的AVR的RTOS》這篇文章絕對是學操作系統入門經典之作。經典之處在于
    發表于 11-15 18:36 ?9次下載
    51<b class='flag-5'>操作系統學習</b><b class='flag-5'>筆記</b>(三):建立一個屬于自己的AVR的RTOS(1)

    51操作系統學習筆記(四):建立一個屬于自己的AVR的RTOS(2)

    承接51操作系統學習筆記(三):建立一個屬于自己的AVR的RTOS(1),在avr中調試一下下面的程序.為了加深學習應用,決定把代碼全部輸一遍,比復制的學些效果應該好一些吧。打開Avr studio
    發表于 11-15 21:06 ?7次下載
    51<b class='flag-5'>操作系統學習</b><b class='flag-5'>筆記</b>(四):建立一個屬于自己的AVR的RTOS(2)

    ROS操作系統學習筆記1

    機器人操作系統(Robot operating system ,ROS)是一個應用于機器人上的基礎框架,它把原本松散的零部件耦合在一起,提供通信的架構,近似上ROS是一個中間件。 ros
    的頭像 發表于 05-19 17:20 ?809次閱讀
    <b class='flag-5'>ROS</b><b class='flag-5'>操作系統學習</b><b class='flag-5'>筆記</b>1

    ROS操作系統學習筆記2

    機器人操作系統(Robot operating system ,ROS)是一個應用于機器人上的基礎框架,它把原本松散的零部件耦合在一起,提供通信的架構,近似上ROS是一個中間件。 ros
    的頭像 發表于 05-19 17:21 ?635次閱讀

    ROS操作系統學習筆記4

    摘要:這篇文章主要介紹ROS常用工具、ROSPY和ROSCPP常用模塊,完全看完三篇文章,可以說ROS就基本入門,可以自己動手做實驗了。 **ROS常用工具** ROS工具
    的頭像 發表于 05-19 17:37 ?733次閱讀
    主站蜘蛛池模板: 天天爱天天操天天射| 日本黄色网址免费| 狠狠色依依成人婷婷九月| 久久99色| 成在线人视频免费视频| 夜夜澡人人爽人人喊_欧美| 天天se天天cao综合网蜜芽| 久久精品免费| 在线视频免费播放| 婷婷在线免费观看| 亚洲无线视频| 四虎永久地址4hu紧急入口| 欧美色视频在线| 国产美女一级ba大片免色| 夜夜超b天天| 狠狠操天天| 亚洲一区二区三区不卡视频| 二区中文字幕| 色偷偷91综合久久噜噜噜男男| 美女中出视频| 影音先锋色偷偷米奇四色| 久久手机看片你懂的日韩1024| toyota东热综合网| 一级@片| 欧美国产一区二区二区| xx网成人| 国产高清免费在线观看| 黄网站色视频免费观看| 四虎影院永久在线观看| 黄色伊人| 奇米影视奇米色777欧美| 68日本xxxxxxxxx18能看的| 亚洲人在线| 久久美女免费视频| 天天做天天看夜夜爽毛片| 福利在线播放| 国产一区国产二区国产三区| 日本在线黄| 51成人网| 黑人xxxx精品| 婷婷月|