1. 程式人生 > >ROS基礎學習筆記(一)

ROS基礎學習筆記(一)

初始化空間資訊:
1.首先需要建立工作空間,比如catkin_ws,我們一般將package包放在src資料夾下面,一般建立空間以後是沒有其餘子目錄的,src自己建立,並在src下進行初始化:
    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/src
    $ catkin_init_workspace
  其餘的類似devel等資料夾通過編譯make指令進行自動建立:
   $ cd ~/catkin_ws
   $ catkin_make
2.每次編寫新的package包之後都需要將其路徑放入ros中以便快速查詢到,source一下:
    $ source ~/catkin_ws/devel/setup.bash
    $ rospack profile

  $ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
3.當你要刪除自己建立的包時不要去直接刪除src目錄,二十去執行:
    $ cd ~/catkin_ws
    $ \rm -rf devel build install
  做完上述步驟之後就可以重新編譯:
    $ cd ~/catkin_ws
    $ catkin_make
    $ source devel/setup.bash

  當然,如果你只需要重新編譯其中的一個包的話也可以直接:
    $ cd ~/catkin_ws
    $ catkin_make --pkg package_name

4.當你使用之前版本rosbuild的時候可能需要以下命令:
  
  $ rosws init ~/ros_workspace ~/catkin_ws/devel

  當出現這種情況說明你沒有安裝相應軟體:    
  
 rosws: command not found

  你可以使用以下語句安裝並再執行:
    $ sudo apt-get install python-rosinstall



常用命令(以下操作的實現需要你將包路徑存放在你的ROS_PACKAGE_PATH檔案中才可以被訪問到):
#路徑列表:
 
   $ echo $ROS_PACKAGE_PATH
#包的查詢:
    $ rospack find [package_name]
    $ rospack find roscpp

#切換目錄:
    $ roscd [locationname[/subdir]]
    $ roscd roscpp

#日誌路徑:
    $ roscd log

#詳細列表:
    $ rosls [locationname[/subdir]]
    $ rosls roscpp_tutorials



建立和執行最簡單的應用:
1.首先認識一下包的結構:
    my_package/
      CMakeLists.txt
      package.xml

  再認識一下含有工作空間的結構:
    workspace_folder/        -- WORKSPACE
      src/                   -- SOURCE SPACE
        CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
        package_1/
          CMakeLists.txt     -- CMakeLists.txt file for package_1
          package.xml        -- Package manifest for package_1
        ...
        package_n/
          CMakeLists.txt     -- CMakeLists.txt file for package_n
          package.xml        -- Package manifest for package_n

2.現在開始建立一個包package:
    $ cd ~/catkin_ws/src
    $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

  這裡使用了catkin_create_pkg命令建立包的結構,中括號裡填寫包的依賴包名:
    # catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

3.編譯並新增包路徑:
    $ cd ~/catkin_ws
    $ catkin_make
    $ . ~/catkin_ws/devel/setup.bash

  catkin_make能夠在devel產生變化,第三步能夠將工作空間新增到ROS環境中去。
4.關於包的依賴(可以建立時直接指定也可以後續在package.xml中新增):
  查詢某個包的一級依賴:
    $ rospack depends1 beginner_tutorials 

  也可以直接進入package.xml檔案直接看:
    $ cat package.xml

  其內部結構如下:
    <package>
    ...
      <buildtool_depend>catkin</buildtool_depend>
      <build_depend>roscpp</build_depend>
      <build_depend>rospy</build_depend>
      <build_depend>std_msgs</build_depend>
    ...
    </package>

  當然,也有可能包的依賴包還依賴有自己的包(rospy為beginner_tutorials的依賴包):
    $ rospack depends1 rospy

  自然我們也有直接檢視所有包的指令:
  $ rospack depends beginner_tutorials

5.自然我們先在可以檢視建立的包的資訊了package.xml,其他資訊自由操作,但是這裡有個憑證license需要填寫,一般可寫:
    <license>BSD</license>
  自此完整package.xml如下:
       1 <?xml version="1.0"?>
       2 <package>
       3   <name>beginner_tutorials</name>
       4   <version>0.1.0</version>
       5   <description>The beginner_tutorials package</description>
       6
       7   <maintainer email="[email protected]">Your Name</maintainer>
       8   <license>BSD</license>
       9   <url type="website">http://wiki.ros.org/beginner_tutorials</url>
      10   <author email="[email protected]">Jane Doe</author>
      11
      12   <buildtool_depend>catkin</buildtool_depend>
      13
      14   <build_depend>roscpp</build_depend>
      15   <build_depend>rospy</build_depend>
      16   <build_depend>std_msgs</build_depend>
      17
      18   <run_depend>roscpp</run_depend>
      19   <run_depend>rospy</run_depend>
      20   <run_depend>std_msgs</run_depend>
      21
      22 </package>
6.編譯新建的包:
  首先要將環境搭建好:
    $ source /opt/ros/%YOUR_ROS_DISTRO%/setup.bash
    $ source /opt/ros/kinetic/setup.bash             (For Kinetic for instance)
  編譯(其實就是之前的操作,這裡詳細看看):
    # In a catkin workspace
    $ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
  上句其實就是原來版本的好多句整合語句:
    # In a CMake project
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make
    $ make install  # (optionally)
  所以本版本直接一條:
    # In a catkin workspace
    $ catkin_make
    $ catkin_make install  # (optionally)
  在src下編譯:
    $ catkin_make




節點的詳細介紹:
1.準備工作:
    $ sudo apt-get install ros-indigo-ros-tutorials
2.啟動ros系統:
    $ roscore
3.此時系統啟動節點rosout,可以用以下命令檢視當前開啟節點:
    $ rosnode list
  將會看到:/rosout
  當然也可以檢視某個節點詳細資訊:
    $ rosnode info /rosout
4.啟動選定節點:
    $ rosrun [package_name] [node_name]
    $ rosrun turtlesim turtlesim_node
  也可以給自己啟動的節點改名字:
    $ rosrun turtlesim turtlesim_node __name:=my_turtle
  當你檢視自己的節點通不通時:
    $ rosnode ping my_turtle




主題的詳細介紹:
1.啟動ROS:
    $ roscore
2.對於上一個裡的turtlesim包,啟動它的一個節點,用來顯示烏龜:
    $ rosrun turtlesim turtlesim_node
  啟動這個節點就是接收鍵盤方向資訊並移動烏龜:
    $ rosrun turtlesim turtle_teleop_key
3.上述2步驟中,turtle_teleop_key是釋出者,他會發布座標資訊變化主題,turtlesim作為接收者去接到資訊改變烏龜的位置
  這裡我們使用rqt_graph包來進行topic的說明演示,先下載安裝:
    $ sudo apt-get install ros-<distro>-rqt
    $ sudo apt-get install ros-<distro>-rqt-common-plugins
  然後我們就可以用rqt_graph來顯示目前我們節點間的通訊方式了:
    $ rosrun rqt_graph rqt_graph
  (一般都是幾個圈加連結圈與圈之間的箭頭,箭頭上顯示的是傳送的訊息格式)
3.介紹有關topic命令:
  [1]:
    rostopic echo [topic]
    $ rostopic echo /turtle1/cmd_vel
  這樣便會顯示釋出在topic上的資料資訊,這裡我們查看了/turtle1/cmd_vel
    linear:
      x: 2.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0
    ---
    linear:
      x: 2.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0
    ---
  [2]:
    $ rostopic list -h/-v
4.ROS訊息機制:
  檢視主題的訊息型別:
    rostopic type [topic]
  當我們執行:
    $ rostopic type /turtle1/cmd_vel
  得到:
    geometry_msgs/Twist
  同時可以使用rosmsg檢視訊息的詳細資訊:
    $ rosmsg show geometry_msgs/Twist
  得到:
    geometry_msgs/Vector3 linear
      float64 x
      float64 y
      float64 z
    geometry_msgs/Vector3 angular
      float64 x
      float64 y
      float64 z
5.主題和訊息的使用:
[1]:
      rostopic pub [topic] [msg_type] [args]
  我們舉例:
    $ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
  -1表示就發一遍停止,/turtle1/cmd_vel是要發表到這個主題上, geometry_msgs/Twist表示要傳送的訊息型別,後續是具體訊息內容
  這樣之後會發現烏龜繞圓滑動了一部分。
  再舉例:
    $ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
 
[2]:
    rostopic hz [topic]
  表示顯示資料釋出的頻率。
  舉例看turtlesim_node釋出/turtle1/pose的頻率:
      $ rostopic hz /turtle1/pose
  顯示得到:
    subscribed to [/turtle1/pose]
    average rate: 59.354
        min: 0.005s max: 0.027s std dev: 0.00284s window: 58
    average rate: 59.459
        min: 0.005s max: 0.027s std dev: 0.00271s window: 118
    average rate: 59.539
        min: 0.004s max: 0.030s std dev: 0.00339s window: 177
    average rate: 59.492
        min: 0.004s max: 0.030s std dev: 0.00380s window: 237
    average rate: 59.463
        min: 0.004s max: 0.030s std dev: 0.00380s window: 290
  可以使用綜合語句:
    $ rostopic type /turtle1/cmd_vel | rosmsg show
6.畫圖工具介紹:
  啟動工具:
    $ rosrun rqt_plot rqt_plot

相關推薦

ROS基礎學習筆記

初始化空間資訊: 1.首先需要建立工作空間,比如catkin_ws,我們一般將package包放在src資料夾下面,一般建立空間以後是沒有其餘子目錄的,src自己建立,並在src下進行初始化: $ mkdir -p ~/catkin_ws/src $ cd ~

MOOC-浙江大學-博弈論基礎-學習筆記

MOOC-浙江大學-博弈論基礎-學習筆記(一) 老師:蔣文華 知人者智,自知者明; 勝人者力,自勝者強; 小勝者術,大勝者德。 第一講 概論 1.何為博弈? 博-博覽全域性, 奕-對弈棋局, 謀定而動! 博弈–是指在一定的遊戲規則約束下,基於直接相互作用

node.js零基礎學習筆記

開始:一個前端小白接觸node.js,簡單的筆記,筆記的記錄邏輯或許不是太清晰,但是能看懂,或許對node.js的學習不精,也可能有錯誤理解的,第一次接觸,僅供和我一樣零基礎學習node.js的人,會繼續補充新增,謝謝大家~麼麼噠 NodeJS 一、簡介    wha

JS基礎學習筆記

1、識別符號,就是指變數、函式、屬性的名字,或者函式的引數。識別符號可以是按照下列格式規則組合起來的一或多個字元: a.第一個字元必須是一個字母、下劃線(_)或一個美元符號($); b.其他字元可以是字母、下劃線、美元符號或數字。 不能把關鍵字、保留字、true、fal

Spark (Python版) 零基礎學習筆記—— 快速入門

由於Scala才剛剛開始學習,還是對python更為熟悉,因此在這記錄一下自己的學習過程,主要內容來自於spark的官方幫助文件,這一節的地址為: 文章主要是翻譯了文件的內容,但也在裡邊加入了一些自己在實際操作中遇到的問題及解決的方案,和一些補充的小知識,一起學習。 環境

Python基礎學習筆記

安裝python可以去官網下載安裝包,各個系統安裝步驟可以自行搜尋。記錄python中常用語法:一、print:字串用'' 或者""print('hello') print("hello")連線字串用+二、運算直接在運行臺上用 加減乘除+-*/int() 和 float();

Python的基礎---學習筆記

1、輸入輸出 >>>Name=input() >>>name 2、資料型別和變數 整數:0xff00 浮點數:1.23e9=12.3e8    0.000012=1.2e-5 字串:”I’m OK”表示I’m OK    ‘I\

Scala學習筆記編程基礎

大數據 上一個 extends 移除 condition api arr 調用方法 tab 強烈推薦參考該課程:http://www.runoob.com/scala/scala-tutorial.html 1. Scala概述 1.1. 什麽是Scala Scala

c 語言學習筆記基礎

lac alert https 內容 con 標記 prime c++ prime c基礎 近期工作上有對C語言算法上的需求,所以要學C,上學的時候沒學過,只學過半年的Java(我是專升本,本科學的材料),2015年工作後也學過C,那時候的需求是能看懂就可以,也就沒深入研究

HLSL學習筆記基礎

pad ddx 做了 cto har 分割 with 圖形 content http://www.cnblogs.com/rainstorm/archive/2013/05/04/3057444.html 前言 五一在家無事,於是學習了一下HLSL,基於XAN4.0的。學習

springmvc學習筆記 -- 從零搭建,基礎入門

out hand char webapp core localhost list ges del 1、新建maven項目 參考mybatis學習筆記(五) -- maven+spring+mybatis從零開始搭建整合詳細過程(上)第一部分,修改配置 2、修

MySQL數據庫基礎知識學習筆記

mysql數據庫1、MySQL基礎與sql語句實戰 MySQL是一種關系型數據庫管理系統,在互聯網公司裏非常流行。Linux下用yum命令安裝 實操:連接數據庫172.16.41.89登錄mysql命令:Mysql -u root -p 回車,然後輸入密碼 查看數據庫:Show databases; 新建數

【JavaScript動畫基礎學習筆記-- 旋轉箭頭

-- turn 我們 math class pla document new lose 隨著鼠標的移動旋轉箭頭。 requestAnimationFrame 在requestAnimationFrame之前我們可以用setInterval來實現動畫的循環:

SpringBoot 學習筆記——Spring回顧與SpringMVC基礎

Spring Boot學習筆記(一) 一、Spring 回顧 1、宣告Bean 的註解 @Component 元件,沒有明確的角色 @Service 業務邏輯層(service層)使用 @Repository 資料訪問層(dao層)使用 @C

Python自動化學習筆記——介面測試基礎

1.1 介面基礎知識  1.1.1    Get&post請求 GET和POST請求:       GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditPosts.aspx?name

FreeRTOS學習筆記基礎

我的FreeRTOS學習,是從朱工的FreeRTOS系列部落格開始的,感謝朱工的悉心整理,文章很不錯,適合學習。 根據朱工的部落格,按照我自己的習慣和思路,把最關鍵的資訊抓取下來,以備快速理清思路。 具體展開和豐富,需要移步朱工的文章,或者參考官方網站的資料。 1. 什麼是Fre

Spring AOP學習筆記基礎概念

AOP產生背景 AOP(Aspect Oriented Programming),即面向切面程式設計,可以說是OOP(Object Oriented Programming,面向物件程式設計)的補充和完善。OOP引入封裝、繼承、多型等概念來建立一種物件層次結構,用於模擬公共行為的一個集合。不

學習筆記HTML基礎

HTML 基礎 HTML 簡介 HTML (Hyper textmarkup language) 中文譯名為”超文字標記語言”,主要是通過 HTML 標記對網頁中的文字、圖片、聲音等內容進行描述。 HTML 提供了許多標記,如段落標記,標題標記,超連結標記,圖片標記等,網頁中需要定義什麼內容,就用相應的

PHP學習筆記--基礎知識

1、編譯器中出現中文亂碼 如果編輯環境中輸入的中文程式設計亂碼,可以在“Edit”à”Set Encoding”,設定編碼為“GBK”,如下: 如果執行輸出視窗中文為亂碼,則可以右擊工程檔案,”Properties’à”PHP Debug”à”Encoding Setting”,設定為

Python機器學習基礎教程筆記

description: 《Python機器學習基礎教程》的第一章筆記,書中用到的相關程式碼見github:https://github.com/amueller/introduction_to_ml_with_python ,筆記中不會記錄。 為何選擇機器學習 人為制訂決