創建一個包
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轉換消息。