ros筆記

1> bashrc文件實際是一個啓動腳本文件,只有將某些文件包正確的添加source在這個文件,當你查找或使用某些文件包的時候才能正確找到,不然,便會出現找不到包的現象發生。而如何確保已經設置了像ROS_PACKAGE_PATH這樣的環境變量,可以通過命令 export | grep ROS 來查看。


2> 工作環境的搭建需要幾步:首先mkdir一個文件,然後cd到此文件目錄下(只有這樣才能對此文件以及此文件裏的各種文件進行相應操作),最後一步是利用catkin_make命令進行編譯。要想保證這個工作空間已經配置正確,便要確保ROS_PACKAGE_PATH環境變量包含在此工作空間目錄,可以採用echo $ROS_PACKAGE_PATH命令來查看。

補充:在創建一個文件後,此文件是沒有什麼內容的,一般創建文件的同時,在文件下要同時創建一個src文件,以後好多操作都會在這裏面,然後退到所建文件,只有在進行catkin_make編譯之後,伴隨着src文件,在相同層級處纔會出現builddevel文件,這兩個文件作用再補充。

補充1build目錄是build space的默認所在位置,同時cmakemake也是在這裏北條用來配置並編譯程序包。develdevelopment)目錄是devel space的默認所在位置,同時也是你安裝程序包(此程序包指的是下面要安裝的beginner_tutorials)之前存放可執行文和庫文件的地方。


3> 相對於ls cd 這樣的指令,也可以利用rospack find [package name] 命令來快速找到文件的存儲路徑。同樣roscd [package name] 可以迅速轉到某包目錄之下,此時可以採用pwd(print working directory)顯示存儲路徑。


4> roscd log 命令是轉到保存日誌文件的目錄下,前提是已經有ROS程序在執行,不然,系統會報錯。


5> rosls ls 的功能類似。


6> TAB鍵的自動輸入功能,很方便。


7> 一個程序包必須包括的兩個文件,一個是package.xml,它提供有關程序包的元信息,包括各種標籤元素。一個是CMakeLists.txt


8> 命令catkin_creat_pkg也可以用來創建程序包,後面也可以跟着幾個依賴包,這些依賴包也可以同時被創建。用這個指令創建的包我們常稱之爲ROS包,上述依賴包一般有std_msgs,rospy,roscpp(rospy是用Python語言編寫,roscpp是用c++語言編寫

)如:catkin_create_pkg beginner_tutorials std_msgs rospy roscpp這個命令,意思就是在src文件下創建一個名爲beginner_tutorials的文件,後面三個均爲依賴包,在文件中不會顯示出來,想要查看的話,可以使用命令rospack depends1 beginner_tutorials ,便會將這三個文件顯示出來。而創建beginner_tutorials文件的同時會在此文件下自動生成四個文件,分別是include,src,CMkaeLists.txt,package.xml。想要查看文件內容,可以使用cat指令,但是此指令只針對文檔文件。

beginner_tutorials有三個依賴包,這屬於一級依賴,而針對這三個依賴包,它們也有它們的依賴包,這些依賴包便稱爲間接依賴包,比如想查看roscpp的依賴包,可鍵入:rospack depends1 roscpp。如果想看beginner_tutorials文件下所有依賴包,可以將depends1改爲depends就好了。

package.xml文件中,刪除掉註釋和沒有使用標籤的部分會使package.xml看起來更加簡潔。而CMkaeLists.txt文件中的很多內容需要用戶自己在以後的使用過程中進行自主添加(比如編譯ROS程序代碼就需要在此文件中添加許多信息)。


9> 在建好beginner_tutorials文件後,切換到此文件目錄下便可以利用catkin_make對其進行編譯,編譯會輸出很多信息,首先是它所使用的每個空間所在的路徑。然後是一個運行指令cmake的信息,然後是c編譯器的信息,包括c++c#等等,對其信息進行check。最後配置,生成,建立,完畢,表示編譯正確。


10> 節點(node)ROS程序包(即是beginner_tutorials)中的一個可執行文件。節點可以利用ROS客戶庫與其他節點進行通信,節點也可以發佈或接收一個話題,也可以提供或使用某種服務。ROS客戶端庫允許使用不同編程語言的節點進行通信(比如pythonc++


11> 如果想運行ROS程序,首要的是輸出命令roscore,而且一個時刻只能運行一個,不然會出錯。此命令相當於將節點管理器master打開。

然後打開另一終端可以使用rosnode list查看當前正在運行着的節點,如果想看到運行節點的詳細信息,可輸入rosnode info /node_name命令。詳細信息包括節點名,發佈信息,訂閱信息,服務信息等等。

可以使用rosrun [package_name] [node_name]命令打開另一節點,如rosrun turtlesim turtlesim_node,這樣便會打開一個節點窗口,此時再查看當前運行着的節點,可以看到會有兩個節點在運行,一個是roscore出來的,一個是rosrun出來的,在此過程,也可以對第二個打開的節點進行重新命名,如 rosrun turtlesim turtlesim_node __name:=my_turtle,此句意思即是將節點名字turtlesim_node改爲my_turtle,同樣可以利用rosnode list查看當前運行着的節點。


12> 而對於上面打開的靜止節點turtlesim_node,怎麼使其運動起來,最簡單的莫過於利用鍵盤的上下左右鍵來進行控制,此時我們便需要運行turtlesim包中另外一個遙控節點turtle_teleop_key,使用命令rosrun turtlesim turtle_teleop_key,此時會輸出很多信息,顯示可以從鍵盤來讀取信息,然後移動turtle


13> 像上述過程,節點與節點之間的通信如何實現的呢。下面來介紹話題topic

turtlesim_nodeturtle_teleop_key這兩個節點是通過一個話題來交流的,而交流雙方總有一個是發佈消息者(publisher),一個是訂閱消息者(subscriber)或者雙方的交流是雙向的,節點既是發佈者,又是訂閱者。發佈或訂閱的工具,或者平臺就是話題topic,話題相當於一個市場,有來購買的,也有來銷售的。此時可以利用rqt_graph圖像的方式來查看節點關係圖,比如rosrun rqt_graph rqt_graph命令,圖像中,箭頭代表消息的走向,中間的即是話題。

rostopic這個命令工具可以獲得很多有關某某話題的信息

rostopic bw     display bandwidth used by topic

rostopic echo   print messages to screen

rostopic hz     display publishing rate of topic

rostopic list   print information about active topics

rostopic pub    publish data to topic

rostopic type   print topic type

比如rostopic echo /turtle1/cmd_vel命令,意思是將節點turtle_teleop_key(也就是鍵盤這個節點)在話題turtle1/cmd_vel上發佈的信息輸出出來,假如節點turtlesim_node移動着,那麼此時終端界面將顯示節點turtlesim_node的運動信息,比如此次命令是顯示的是節點turtlesim_node的線性方向和角性方向上的速度,包括三個軸x,y,z。假如節點turtlesim_node不停運動,那麼,信息會一直更新。

此時將rqt_graph出來的圖像刷新一下,顯示,話題/turtle1/cmd_vel也訂閱了節點turtle_teleop_key發佈的消息,正因爲話題也訂閱了此消息,節點turtlesim_node才能在話題上訂閱相同的這個消息來使節點turtlesim_node移動。

利用rostopic list -v可以顯示有關發佈和訂閱的話題及其類型的詳細信息。

rostopic type [topic]命令可以顯示話題的類型,上述話題/turtle1/cmd_vel的類型爲geometry_msgs/Twist。可以進一步通過rosmsg show geometry_msgs/Twist命令來查看geometry_msgs/Twist的詳細信息。這個詳細信息顯示的節點turtlesim_node想要得到怎樣的消息來控制自己,知道了這個我們就可以發佈一些此類型的消息來讓節點turtlesim_node做其他運動。

大致格式:rostopic pub [topic_name] [topic_type] -- '[x,y,z]' '[x,y,z]'

比如命令rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

總體意思是讓節點turtlesim_node2.0線速度和1.8角速度移動(但會停止,實際情況是持續了三秒)。

此命令詳細解析:rostopic pub 就是發佈消息到某個話題,-1(破折號,1)意思是發佈完消息立即退出(將-1去掉,仍舊是運動完立即停止,但是沒有輸出持續了三秒)。--(雙破折號)是必須的,後面的就是Linearangular分別具有的x,y,z參數。如同上面geometry_msgs/Twist的詳細信息顯示一樣,是按照那個格式組織的。此命令並沒有持續的原因是此消息的頻率不穩定,因此可以使用一個穩定的頻率來使turtlesim_node一直運動。

大致格式:rostopic pub [topic_name] [topic_type] -r 1 -- '[x,y,z]' '[x,y,z]'意思是以1HZ的頻率來發布命令到話題上(也就是1秒一次,持續發佈)。將1HZ換爲0.5那麼即2秒發佈一次,這樣,turtlesim_node會間斷移動。


14> 使用rostopic hz [topic]來查看數據發佈的頻率,比如:rostopic hz /turtle1/pose,輸出顯示平均頻率大約60HZ

同樣可以查看話題類型,並查看詳細類型詳細信息,此命令rostopic type /turtle1/cmd_vel | rosmsg show相當於兩次命令,一個是rostopic type /turtle1/cmd_vel,輸出類型geometry_msgs/Twist;然後再使用rosmsg show geometry_msgs/Twist。等於是將兩條命令寫作一條,"|"的作用就是這個。


15> 此時可以使用rqt_plot命令來查看節點運動x-y-z位置座標圖(現實情況是不能查看z軸,原因以後再續)。


16> ROS Services

服務(services)是節點之間通訊的另外一種形式,服務允許節點發送請求(request)並獲得一個響應(response)

rosservice args print service arguments

rosservice call call the service with the provided args

rosservice find find services by service type

rosservice info print information about service

rosservice list list active services

rosservice type print service type

rosservice uri print service ROSRPC uri

rosservice list可以列出所有的服務信息,然後可以利用rosservice type [service_type]查看某種服務的類型。然後可以使用rossrv show [service_type]來查看服務的具體信息。然後可以根據這個信息來發布類型指令,開始某些操作。

比如:rosservice type spawn| rossrv show,此句和上述講的"|"作用一樣,意思是將兩句指令合成一句(一個是rosservice type spawn,一個是rossrv show turtlesim/Spawn。第一個指令輸出便是turtlesim/Spawn),一起輸入。

Spawn意思是再生,那麼我們可以在此前那個那個節點turtlesim_node窗口再生一個,如指令:rosservice call spawn 2 2 0.2 ""意思是在給定位置和角度生成一隻新的烏龜。解釋:0.2指角度,也就是朝向,從0開始往上,0代表朝x軸正方向,增加1逆時針大約轉30度。兩個2是位置點,第一個2x軸,在窗口顯示左右位置變化,第二個2y軸,在窗口顯示上下位置變化,窗口左下角代表原點位置。


17> rosparam

rosparam set set parameter(設置參數)

rosparam get get parameter(獲取參數)

rosparam load load parameters from file(從文件讀取參數)

rosparam dump dump parameters to file(將參數詳細信息寫入文件中)

rosparam delete delete parameter(刪除參數)

rosparam list list parameter names(列出參數名)

rosparam(參數服務器)上的參數都有:

/background_b(調背景藍色)

/background_g(調背景綠色)

/background_r(調背景紅色)

/roslaunch/uris/aqy:51932

/run_id

(可以使用rosparam list指令輸出)

改變背景顏色分爲兩步,第一步是設置:比如rosparam set background_r 150,第二步是調用清除服務使得修改生效,rosservice call clear。至此修改完畢。

rosparam dump params.yaml(將服務參數寫入到文件中)

rosparam load params.yaml copy(params.yaml中的參數再寫入到備份文件copy當中)

rosparam get copy/background_b(再次得到藍背景顏色值)


18> rqt_consoleROS日誌框架(logging framework)的一部分,用來顯示節點的輸出信息;rqt_logger_level允許我們修改節點運行時輸出信息的日誌等級(logger levels(包括debug,warn,info,error)


19> roslaunch可以啓動定義在launch文件中的多個節點

首先我們要先創建launch文件,在編輯的時候我們採用vim編輯器,使用方法如下:

第一:切換到需要的文件目錄下,輸入指令vim file_name

其次:鍵入i或者a,可以進入編輯模式,此時可在終端中輸入你想編輯的內容,編輯完畢完整。

第三:按下Esc鍵,退出編輯,然後輸入冒號,接着輸入wwrite)和qquit)或者是隻輸入x(即wq=x)然後回車,即退出並保存。


20> 在編輯完launch文件之後可以使用roslaunch beginner_tutorials turtlemimic.launch命令同時啓動兩個turtlesim窗口,再發布消息,可以讓兩個烏龜同時運動。


21> 使用rosed編輯ROS中的文件,其實vim更加方便快捷。


22> 創建ROS消息和ROS服務

消息(msg):msg文件就是一個描述ROS中所使用消息類型的簡單文本。它們會被用來生成不同語言的源代碼。存放在packagemsg目錄下。

服務(srv):一個srv文件描述一項服務。它包含兩個部分:請求和響應。存放在srv目錄下。

主要工作修改package.xmlCMakeLists.txt文件。

所有在msg路徑下的.msg文件都將轉換爲ROS所支持語言的源代碼。生成的C++頭文件將會放置在~/catkin_ws/devel/include/beginner_tutorials/。 Python腳本語言會在 ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg 目錄下創建。 lisp文件會出現在 ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/ 路徑下。


23> 編寫簡單的消息發佈器和訂閱器(利用c++

首先是在類似於beginner_tutorials文件中建立文件夾src或者scripts,前者是爲了放後綴爲.cpp的文件,後者是爲了放後綴爲.py的文件,首先在相應文件夾下編寫相應的發佈者和訂閱者程序,然後回到beginner_tutorials文件下的CmakeLists.txt文件下添加相應語句,如下發布helloworld的程序時添加的:

#編寫簡單消息發佈器和訂閱器(C++

include_directories(include ${catkin_INCLUDE_DIRS})


add_executable(talker src/talker.cpp)

target_link_libraries(talker ${catkin_LIBRARIES})


add_executable(listener src/listener.cpp)

target_link_libraries(listener ${catkin_LIBRARIES})


然後完畢,在catkin_ws目錄下進行編譯,之後依次開始測試發佈者程序運行,訂閱者程序運行,命令如下:

rosrun beginner_tutorials talker (c++)

rosrun beginner_tutorials listener

或者

rosrun beginner_tutorials talker.py (python)

rosrun beginner-tutorials listener.py

即可看到結果




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章