ROS機器人操作系統(簡要總結)

創建一個包

catkin_create_pkg 包名 依賴

例子

catkin_create_pkg zsw std_msgs roscpp 

說明
依賴可以在package.xml 中修改
這個時候,包創建出來了,可是沒有用。需要在工程中catkin_make install 安裝這個包。

編寫節點

包目錄的src文件中編寫文件
在CMakeLists.txt 中添加:

add_executable(節點名 src/節點文件.cpp)
target_link_libraries(節點名 ${catkin_LIBRARIES})
add_dependencies(節點名 包名_generate_messages_cpp)

還有

   generate_messages(DEPENDENCIES std_msgs) 

接着到工程目錄下catkin_make就可以把節點編譯出來了
例子

	add_executable(talker src/talker.cpp)
	target_link_libraries(talker ${catkin_LIBRARIES})
	add_dependencies(talker beginner_tutorials_generate_messages_cpp) 

說明
add_dependencies會產生 包名_generate_messages的built target出來
也就是說,generate_messages生成一個依賴,
名字就是包名_generate_messages_cpp
可以註釋掉generate_messages(DEPENDENCIES std_msgs)
add_dependencies(talker std_msgs)

運行節點

rosrun 包名 節點名
說明
注意roscore

同時運行多個節點

rosrun 包名 節點名 __name:=新的節點名

例子

rosrun turtlesim turtlesim_node __name:=my_turtle 

說明
Ros中不允許運行相同名字的節點,節點中的主題可以一樣。
所以通過修改節點名,可以啓動多個相同功能的節點。

管理節點

在包下,launch 文件夾下創建.launch 文件

roslaunch 包名 文件名.launch 

例子

roslaunch beginner_tutorials turtlemimic.launch 

說明
.launch可以一下子啓動很多節點,就不用搞很多終端出來了。注意,這樣啓動的話,沒有啓動一個終端可以看那些字符消息。
這個時候就需要調試工具來看log了

通過調試工具來看log

打開log工具

rosrun rqt_console rqt_console 

設置log級別(信息過濾)

rosrun rqt_logger_level rqt_logger_level 

launch 文件(有完整文檔詳細說明)

1. <group ns="turtlesim1">
2. 		<node pkg="turtlesim" name="sim" type="turtlesim_node"/>
3. </group> 

group 代表一個組,組裏面的主題只能發到組中,其他組的同個主題節點並不能收到這個組裏面的主題消息。
Node可以放在組裏面,也可以不放在組裏面。代表一個節點。

編寫服務和客戶

實際上,服務和客戶也屬於節點,可以用rosnode查看,只是客戶運行只是一剎那,看不到,但是服務可以看到。
當然服務還可以用rosservice來看,可以看更多的信息。

編寫srv文件

package.xml 中加入,這兩個是固定寫法,srv和msg都依賴他們

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend> 

寫完後,打開CMakeLists.txt
find_package 中加入message_generation ,這是一個固定寫法,在srv和msg部分的註釋中可以看到。接着

 catkin_package(
 ...
 CATKIN_DEPENDS message_runtime ...
  ...) 

以上是srv和msg通用的步驟,目的都是配置好message_generation和message_runtime,這樣,srv和msg就可以用了。

add_service_files 中加入相關srv文件。
catkin_make 一下就會生成頭文件,在devel/include文件夾中

編寫msg文件(用於節點的)

類似srv,add_message_files 中要加入相關msg文件
主要用於節點主題消息。而srv用於服務。

服務與客戶

包含上面生成的頭文件。寫完後,

1. add_executable(add_two_ints_server src/add_two_ints_server.cpp)
2. target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
3. add_dependencies(add_two_ints_server beginner_tutorials_gencpp)
4.
5. add_executable(add_two_ints_client src/add_two_ints_client.cpp)
6. target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
7. add_dependencies(add_two_ints_client beginner_tutorials_gencpp) 

寫法跟寫節點一樣,實際上他們就是節點。只是add_dependencies的時候有點不一樣。Gencpp並沒有在CMakeLists.txt 有所體現。照寫就行。

catkin_make一下就可以跑了

參數服務器(暫未跑通)

參數服務器跟上面提到的服務有所不同。小龜程序中的設置背景顏色,就是用了參數服務器。通過修改服務器的參數,來改變顏色,通過rosparam get可以獲取到相應的參數。
見:http://blog.csdn.net/Start_From_Scratch/article/details/51567813 C++
Python也是同樣原理:
if rospy.has_param(self._lm_param):
lm = rospy.get_param(self._lm_param)

Urdf文件
進行機器人模擬的時候,urdf文件用來描述機器人模型

Ros by example

源碼地址
https://github.com/pirobot/rbx1
注意,裏面只有4個版本,沒有jade版本。
使用源碼
下載下來的源碼目錄結構跟我們工程不一樣,不能直接rosmake,要將源碼裏面的包複製到自己建的工程下的src目錄下。
關於cvg
源碼使用的是cvg作爲參數服務文件,但新版的ros用的是yaml文件和.rviz文件。所以會無法啓動rviz。

安裝語音

1.$ sudo apt-get install gstreamer0.10-pocketsphinx
2.$ sudo apt-get install ros-fuerte-audio-common
3.$ sudo apt-get install libasound2

apt-get install ros-hydro-pocketsphinx
apt-get install gstreamer0.10-gconf
然後就可以跑語音例子了。ㄟ(⊙ω⊙ㄟ)
roslaunch pocketsphinx robocup.launch
rostopic echo /recognizer/output

機器人TurtleBot

roslaunch rbx1_bringup fake_pi_robot.launch
rosrun rviz rviz -d …rbx1_nav/sim.rviz
然後
pub /cmd_vel geometry_msgs/Twist ‘{linear:{x: 0.2, y: 0, z: 0},angular:{x: 0, y: 0, z: 0.5}}’
就可以動起來了。
rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}可以停下來。-l可以不用

節點關係圖

工程比較大的時候,節點關係圖能夠看出消息是怎麼傳遞的。
rosrun rqt_graph rqt_graph

掏糞座標

Rosrun tf tf_echo /map /odom
查看兩個座標消息怎麼傳輸的。以及傳輸的數據。
Rosrun tf view_frames
可以在當前路徑下生成一個.pdf就可以詳細看到目前狀況。不過也只能看到當前5s內的tf轉換消息。

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