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 ,筆記中不會記錄。 為何選擇機器學習 人為制訂決