<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SLAM+語音機器人DIY系列:(二)ROS入門——4.如何編寫ROS的第一個程序hello_world

      溫馨提示 

      本篇文章已經收錄在我最新出版的書籍《機器人SLAM導航核心技術與實戰》,感興趣的讀者可以購買紙質書籍來進行更加深入和系統性的學習,購買鏈接如下:

      摘要                                          

      ROS機器人操作系統在機器人應用領域很流行,依托代碼開源和模塊間協作等特性,給機器人開發者帶來了很大的方便。我們的機器人“miiboo”中的大部分程序也采用ROS進行開發,所以本文就重點對ROS基礎知識進行詳細的講解,給不熟悉ROS的朋友起到一個拋磚引玉的作用。本章節主要內容:

      1.ROS是什么

      2.ROS系統整體架構

      3.在ubuntu16.04中安裝ROS kinetic

      4.如何編寫ROS的第一個程序hello_world

      5.編寫簡單的消息發布器和訂閱器

      6.編寫簡單的service和client

      7.理解tf的原理

      8.理解roslaunch在大型項目中的作用

      9.熟練使用rviz

      10.在實際機器人上運行ROS高級功能預覽



      4.如何編寫ROS的第一個程序hello_world

      既然ROS已經成功安裝好了,大家一定很想親自動動手編一個通過起手式例程hello_world,可以學到工作空間的創建、功能包的創建、功能包的源代碼編寫、功能包的編譯配置、功能包的編譯、功能包的啟動運行等知識。ROS的小程序試試手,沒錯,這一節就隆重請出程序界的起手式例程hello_world。

      通過起手式例程hello_world,可以學到工作空間的創建、功能包的創建、功能包的源代碼編寫、功能包的編譯配置、功能包的編譯、功能包的啟動運行等知識。

      (1)工作空間的創建

      打開命令行終端,分別輸入如下命令:

      #先切回主目錄
      cd ~/
      
      #新建工作空間文件夾
      mkdir catkin_ws
      
      #在catkin_ws目錄下新建src文件夾
      cd catkin_ws
      mkdir src
      
      #初始化src目錄,生成的CMakeLists.txt為功能包編譯配置
      cd src
      catkin_init_workspace
      
      #切回catkin_ws目錄,對該工作空間執行一次編譯
      cd ~/catkin_ws
      catkin_make
      
      #環境變量配置,使新建的catkin_ws工作空間可用
      source devel/setup.bash

      這時,便已經創建好了一個ROS的工作空間了,接下來就是在catkin_ws工作空間下的src目錄下新建功能包并進行功能包程序編寫了,如果想了解工作空間的詳細目錄結構,請參考本章節(二)ROS入門——2.ROS系統整體架構這有對ROS的文件組織結構進行詳解。

      (2)功能包的創建

      繼續在命令行終端中,輸入如下命令:

      #在catkin_ws/src/下創建取名為hello_world的功能包,
      #ROS功能包命名規范:只允許使用小寫字母、數字和下劃線,
      #且首字符必須為一個小寫字母。
      cd ~/catkin_ws/src/
      catkin_create_pkg hello_world

      這時候在~/catkin_ws/src/目錄下能看到一個叫hello_world的文件夾,文件夾名稱就是功能包的名稱以及功能包的唯一標識符,這個說明功能包創建成功了。

      3)功能包的源代碼編寫

      由于我們只是要編寫一個能打印hello world”的程序,所以就很簡單了,這里先以c++代碼作為示范,后面會講解python的。一些在線教程建議在你的功能包目錄中創建src目錄用來存放c++源文件,這個附加的組織結構是很有益處的,特別是對含有很多種類型文件的大型功能包,不過不是嚴格必要的出于編程規范,我這里也會采用這樣的建議把c++源文件放在功能包中的src目錄下。

      所以,首先在hello_world目錄下新建src目錄,再在新建的src目錄下新建一個my_hello_world_node.cpp文件。這里的新建目錄和文件的方法可以在圖形界面下直接操作會更方便一點,如圖11

      (圖11)在功能包中新建文件夾及文件

      用文本編輯器gedit打開my_hello_world_node.cpp文件,并輸入如下內容。

      #include “ros/ros.h”
      
      int main(int argc,char **argv) 
      {
        ros::init(argc,argv,"hello_node");
        ros::NodeHandle nh;
        ROS_INFO_STREAM("hello world!!!");
      }

      這里對代碼做一個解析:

      #include “ros/ros.h”

      這一句是包含頭文件ros/ros.h,這是ROS提供的C++客戶端庫,是必須包含的頭文件,在后面的編譯配置中要添加相應的依賴庫roscpp

       

      ros::init(argc,argv,"hello_node");

      這一句是初始化ros節點并指明節點的名稱,這里給節點取名為hello_node,一旦程序運行后就可以在ros的計算圖中被注冊為hello_node名稱標識的節點。

       

      ros::NodeHandle nh;

      這一句是聲明一個ros節點的句柄,初始化ros節點必須的。

       

      ROS_INFO_STREAM("hello world!!!");

      這一句是調用了roscpp庫提供的方法ROS_INFO_STREAM來打印信息,這里打印字符串"hello world!!!"

      4)功能包的編譯配置

      聲明依賴庫:

      對于我們的my_hello_world_node.cpp程序來說,我們包含了<ros/ros.h>這個庫,因此我們需要添加名為roscpp的依賴庫。

      首先,用文本編輯器gedit打開功能包目錄下的CMakeLists.txt文件,在find_package(catkin REQUIRED ...)字段中添加roscpp,添加后的字段如下:

      find_package(catkin REQUIRED COMPONENTS roscpp)

      同時,找到include_directories(...)字段,去掉${catkin_INCLUDE_DIRS}前面的注釋,如下:

      include_directories(
      # include
       ${catkin_INCLUDE_DIRS}
      )

      添加好后的效果如圖12所示。

      (圖12)在CMakeLists.txt中添加roscpp依賴庫

      然后,用文本編輯器gedit打開功能包目錄下的package.xml文件,找到這樣一句話<buildtool_depend>catkin</buildtool_depend>,在這句話的下面添加如下內容:

      <build_depend>roscpp</build_depend>
      <build_export_depend>roscpp</build_export_depend>
      <exec_depend>roscpp</exec_depend>

      添加好后的效果如圖13所示。

      (圖13)在package.xml中添加roscpp依賴庫

      聲明可執行文件:

      就接下來,我們需要在CMakeLists.txt中添加兩句,我的習慣在文件最后一行添加就好了,來聲明我們需要創建的可執行文件。

      add_executable(my_hello_world_node src/my_hello_world_node.cpp)
      target_link_libraries(my_hello_world_node ${catkin_LIBRARIES})

      第一行聲明了我們想要的可執行文件的文件名,以及生成此可執行文件所需的源文件列表。如果你有多個源文件,把它們列在此處,并用空格將其區分開。

      第二行告訴 Cmake 當鏈接此可執行文件時需要鏈接哪些庫(在上面的 find_package 中定義)。如果你的包中包括多個可執行文件,為每一個可執行文件復制和修改上述兩行代碼。

      添加好后的效果如圖14所示。

       

      (圖14)在CMakeLists.txt聲明可執行文件

      5)功能包的編譯

      功能包的編譯配置好后,就可以開始編譯了,這里有兩種編譯方式,一種是編譯工作空間內的所有功能包,另一種是編譯工作空間內的指定功能包,兩種編譯方式各有用處,下面分別講解。

      第一種,編譯工作空間內的所有功能包:

      cd ~/catkin_ws/
      catkin_make 

      第二種,編譯工作空間內的指定功能包:

      其實就是加入參數 -DCATKIN_WHITELIST_PACKAGES=””,在雙引號中填入需要編譯的功能包名字,用空格分割。

      cd ~/catkin_ws/
      catkin_make -DCATKIN_WHITELIST_PACKAGES="hello_world"

      6)功能包的啟動運行

      首先,需要用roscore命令來啟動ROS節點管理器,ROS節點管理器是所有節點運行的基礎。

      打開命令行終端,輸入命令:

      roscore

      然后,用source devel/setup.bash激活catkin_ws工作空間,用rosrun <package_name> <node_name>啟動功能包中的節點。

      再打開一個命令行終端,分別輸入命令:

      cd ~/catkin_ws/
      source devel/setup.bash
      rosrun hello_world my_hello_world_node 

      看到有輸出hello world!!!就說明程序已經正常執行了,按照我們的設計程序正常打印后會自動結束,如圖15

      (圖15hello_world功能包中my_hello_world_node節點執行結果

      到這里,恭喜你已經學會了ROS的第一個程序hello world!!!

      后記                                                      

      ------SLAM+語音機器人DIY系列【目錄】快速導覽------

      第1章:Linux基礎

      1.Linux簡介

      2.安裝Linux發行版ubuntu系統

      3.Linux命令行基礎操作

      第2章:ROS入門

      1.ROS是什么

      2.ROS系統整體架構

      3.在ubuntu16.04中安裝ROS kinetic

      4.如何編寫ROS的第一個程序hello_world

      5.編寫簡單的消息發布器和訂閱器

      6.編寫簡單的service和client

      7.理解tf的原理

      8.理解roslaunch在大型項目中的作用

      9.熟練使用rviz

      10.在實際機器人上運行ROS高級功能預覽

      第3章:感知與大腦

      1.ydlidar-x4激光雷達

      2.帶自校準九軸數據融合IMU慣性傳感器

      3.輪式里程計與運動控制

      4.音響麥克風與攝像頭

      5.機器人大腦嵌入式主板性能對比

      6.做一個能走路和對話的機器人

      第4章:差分底盤設計

      1.stm32主控硬件設計

      2.stm32主控軟件設計

      3.底盤通信協議

      4.底盤ROS驅動開發

      5.底盤PID控制參數整定

      6.底盤里程計標

      第5章:樹莓派3開發環境搭建

      1.安裝系統ubuntu_mate_16.04

      2.安裝ros-kinetic

      3.裝機后一些實用軟件安裝和系統設置

      4.PC端與robot端ROS網絡通信

      5.Android手機端與robot端ROS網絡通信

      6.樹莓派USB與tty串口號綁定

      7.開機自啟動ROS節點

      第6章:SLAM建圖與自主避障導航

      1.在機器人上使用傳感器

      2.google-cartographer機器人SLAM建圖

      3.ros-navigation機器人自主避障導航

      4.多目標點導航及任務調度

      5.機器人巡航與現場監控

      第7章:語音交互與自然語言處理

      1.語音交互相關技術

      2.機器人語音交互實現

      3.自然語言處理云計算引擎

      第8章:高階拓展

      1.miiboo機器人安卓手機APP開發

      2.centos7下部署Django(nginx+uwsgi+django+python3)

       


       

      參考文獻

       

      [1] 張虎,機器人SLAM導航核心技術與實戰[M]. 機械工業出版社,2022.

       

       

       

       

      前言
      編程基礎篇
      第1章 ROS入門必備知識
      1.1 ROS簡介 2
      1.1.1 ROS的性能特色 2
      1.1.2 ROS的發行版本 3
      1.1.3 ROS的學習方法 3
      1.2 ROS開發環境的搭建 3
      1.2.1 ROS的安裝 4
      1.2.2 ROS文件的組織方式 4
      1.2.3 ROS網絡通信配置 5
      1.2.4 集成開發工具 5
      1.3 ROS系統架構 5
      1.3.1 從計算圖視角理解ROS架構 6
      1.3.2 從文件系統視角理解ROS架構 7
      1.3.3 從開源社區視角理解ROS架構 8
      1.4 ROS調試工具 8
      1.4.1 命令行工具 9
      1.4.2 可視化工具 9
      1.5 ROS節點通信 10
      1.5.1 話題通信方式 12
      1.5.2 服務通信方式 15
      1.5.3 動作通信方式 19
      1.6 ROS的其他重要概念 25
      1.7 ROS 2.0展望 28
      1.8 本章小結 28
      第2章 C++編程范式
      2.1 C++工程的組織結構 29
      2.1.1 C++工程的一般組織結構 29
      2.1.2 C++工程在機器人中的組織結構 29
      2.2 C++代碼的編譯方法 30
      2.2.1 使用g++編譯代碼 31
      2.2.2 使用make編譯代碼 32
      2.2.3 使用CMake編譯代碼 32
      2.3 C++編程風格指南 33
      2.4 本章小結 34
      第3章 OpenCV圖像處理
      3.1 認識圖像數據 35
      3.1.1 獲取圖像數據 35
      3.1.2 訪問圖像數據 36
      3.2 圖像濾波 37
      3.2.1 線性濾波 37
      3.2.2 非線性濾波 38
      3.2.3 形態學濾波 39
      3.3 圖像變換 40
      3.3.1 射影變換 40
      3.3.2 霍夫變換 42
      3.3.3 邊緣檢測 42
      3.3.4 直方圖均衡 43
      3.4 圖像特征點提取 44
      3.4.1 SIFT特征點 44
      3.4.2 SURF特征點 50
      3.4.3 ORB特征點 52
      3.5 本章小結 54
      硬件基礎篇
      第4章 機器人傳感器
      4.1 慣性測量單元 56
      4.1.1 工作原理 56
      4.1.2 原始數據采集 60
      4.1.3 參數標定 65
      4.1.4 數據濾波 73
      4.1.5 姿態融合 75
      4.2 激光雷達 91
      4.2.1 工作原理 92
      4.2.2 性能參數 94
      4.2.3 數據處理 96
      4.3 相機 100
      4.3.1 單目相機 101
      4.3.2 雙目相機 107
      4.3.3 RGB-D相機 109
      4.4 帶編碼器的減速電機 111
      4.4.1 電機 111
      4.4.2 電機驅動電路 112
      4.4.3 電機控制主板 113
      4.4.4 輪式里程計 117
      4.5 本章小結 118
      第5章 機器人主機
      5.1 X86與ARM主機對比 119
      5.2 ARM主機樹莓派3B+ 120
      5.2.1 安裝Ubuntu MATE 18.04 120
      5.2.2 安裝ROS melodic 122
      5.2.3 裝機軟件與系統設置 122
      5.3 ARM主機RK3399 127
      5.4 ARM主機Jetson-tx2 128
      5.5 分布式架構主機 129
      5.5.1 ROS網絡通信 130
      5.5.2 機器人程序的遠程開發 130
      5.6 本章小結 131
      第6章 機器人底盤
      6.1 底盤運動學模型 132
      6.1.1 兩輪差速模型 132
      6.1.2 四輪差速模型 136
      6.1.3 阿克曼模型 140
      6.1.4 全向模型 144
      6.1.5 其他模型 148
      6.2 底盤性能指標 148
      6.2.1 載重能力 148
      6.2.2 動力性能 148
      6.2.3 控制精度 150
      6.2.4 里程計精度 150
      6.3 典型機器人底盤搭建 151
      6.3.1 底盤運動學模型選擇 152
      6.3.2 傳感器選擇 152
      6.3.3 主機選擇 153
      6.4 本章小結 155
      SLAM篇
      第7章 SLAM中的數學基礎
      7.1 SLAM發展簡史 158
      7.1.1 數據關聯、收斂和一致性 160
      7.1.2 SLAM的基本理論 161
      7.2 SLAM中的概率理論 163
      7.2.1 狀態估計問題 164
      7.2.2 概率運動模型 166
      7.2.3 概率觀測模型 171
      7.2.4 概率圖模型 173
      7.3 估計理論 182
      7.3.1 估計量的性質 182
      7.3.2 估計量的構建 183
      7.3.3 各估計量對比 190
      7.4 基于貝葉斯網絡的狀態估計 193
      7.4.1 貝葉斯估計 194
      7.4.2 參數化實現 196
      7.4.3 非參數化實現 202
      7.5 基于因子圖的狀態估計 206
      7.5.1 非線性最小二乘估計 206
      7.5.2 直接求解方法 206
      7.5.3 優化方法 208
      7.5.4 各優化方法對比 218
      7.5.5 常用優化工具 219
      7.6 典型SLAM算法 221
      7.7 本章小結 221
      第8章 激光SLAM系統
      8.1 Gmapping算法 223
      8.1.1 原理分析 223
      8.1.2 源碼解讀 228
      8.1.3 安裝與運行 233
      8.2 Cartographer算法 240
      8.2.1 原理分析 240
      8.2.2 源碼解讀 247
      8.2.3 安裝與運行 258
      8.3 LOAM算法 266
      8.3.1 原理分析 266
      8.3.2 源碼解讀 267
      8.3.3 安裝與運行 270
      8.4 本章小結 270
      第9章 視覺SLAM系統
      9.1 ORB-SLAM2算法 274
      9.1.1 原理分析 274
      9.1.2 源碼解讀 310
      9.1.3 安裝與運行 319
      9.1.4 拓展 327
      9.2 LSD-SLAM算法 329
      9.2.1 原理分析 329
      9.2.2 源碼解讀 334
      9.2.3 安裝與運行 337
      9.3 SVO算法 338
      9.3.1 原理分析 338
      9.3.2 源碼解讀 341
      9.4 本章小結 341
      第10章 其他SLAM系統
      10.1 RTABMAP算法 344
      10.1.1 原理分析 344
      10.1.2 源碼解讀 351
      10.1.3 安裝與運行 357
      10.2 VINS算法 362
      10.2.1 原理分析 364
      10.2.2 源碼解讀 373
      10.2.3 安裝與運行 376
      10.3 機器學習與SLAM 379
      10.3.1 機器學習 379
      10.3.2 CNN-SLAM算法 411
      10.3.3 DeepVO算法 413
      10.4 本章小結 414
      自主導航篇
      第11章 自主導航中的數學基礎
      11.1 自主導航 418
      11.2 環境感知 420
      11.2.1 實時定位 420
      11.2.2 環境建模 421
      11.2.3 語義理解 422
      11.3 路徑規劃 422
      11.3.1 常見的路徑規劃算法 423
      11.3.2 帶約束的路徑規劃算法 430
      11.3.3 覆蓋的路徑規劃算法 434
      11.4 運動控制 435
      11.4.1 基于PID的運動控制 437
      11.4.2 基于MPC的運動控制 438
      11.4.3 基于強化學習的運動控制 441
      11.5 強化學習與自主導航 442
      11.5.1 強化學習 443
      11.5.2 基于強化學習的自主導航 465
      11.6 本章小結 467
      第12章 典型自主導航系統
      12.1 ros-navigation導航系統 470
      12.1.1 原理分析 470
      12.1.2 源碼解讀 475
      12.1.3 安裝與運行 479
      12.1.4 路徑規劃改進 492
      12.1.5 環境探索 496
      12.2 riskrrt導航系統 498
      12.3 autoware導航系統 499
      12.4 導航系統面臨的一些挑戰 500
      12.5 本章小結 500
      第13章 機器人SLAM導航綜合實戰
      13.1 運行機器人上的傳感器 502
      13.1.1 運行底盤的ROS驅動 503
      13.1.2 運行激光雷達的ROS驅動 503
      13.1.3 運行IMU的ROS驅動 504
      13.1.4 運行相機的ROS驅動 504
      13.1.5 運行底盤的urdf模型 505
      13.1.6 傳感器一鍵啟動 506
      13.2 運行SLAM建圖功能 506
      13.2.1 運行激光SLAM建圖功能 507
      13.2.2 運行視覺SLAM建圖功能 508
      13.2.3 運行激光與視覺聯合建圖功能 508
      13.3 運行自主導航 509
      13.4 基于自主導航的應用 510
      13.5 本章小結 511
      附錄A Linux與SLAM性能優化的探討
      附錄B 習題
      posted @ 2019-02-16 13:01  小虎哥哥愛學習  閱讀(10364)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 狠狠做五月深爱婷婷天天综合| 亚洲高清国产自产拍av| 成年在线观看免费人视频| 在线看片免费人成视频久网| 成人3d动漫一区二区三区 | 欧美经典人人爽人人爽人人片| 亚洲中文字幕无码爆乳app| 欧美成本人视频免费播放| 巩留县| 久热99热这里只有精品| 一区二区三区鲁丝不卡| 亚洲欧美人成网站在线观看看| 中文字幕免费不卡二区| 人妻体内射精一区二区三区| 国产亚洲无线码一区二区| 丰满少妇呻吟高潮经历| 久久99热只有频精品8| 99久久久无码国产麻豆| 色多多性虎精品无码av| 国产一区二区三区禁18| 67194熟妇在线观看线路| 桃花岛亚洲成在人线AV| 亚洲精品韩国一区二区| 亚洲免费视频一区二区三区 | av在线播放国产一区| 国产精品综合av一区二区国产馆| 激情综合网激情五月我去也| 中文字幕人妻互换av久久| 波多野结衣免费一区视频| 国产成人精品一区二三区| 精品人妻日韩中文字幕| 亚洲精品综合网二三区| 亚洲欧美日韩人成在线播放| 午夜福利92国语| 亚欧美闷骚院| 乌兰县| 中文 在线 日韩 亚洲 欧美| 亚洲一区二区中文av| 亚洲精品理论电影在线观看| 欧美嫩交一区二区三区| 午夜成人鲁丝片午夜精品|