ROS官網初級教程學習總結(10-16)

教程網址:http://wiki.ros.org/cn/ROS/Tutorials
本博客爲10-16小節。

創建ROS消息和ROS服務

消息(msg)和服務(srv)介紹

  • 消息(msg): msg文件就是一個描述ROS中所使用消息類型的簡單文本。它們會被用來生成不同語言的源代碼。msg文件存放在package的msg目錄下。
  • 服務(srv): 一個srv文件描述一項服務。它包含兩個部分:請求和響應。srv文件則存放在srv目錄下。
    示例:
    下面是一個msg文件的樣例,它使用了Header,string,和其他另外兩個消息類型。
  Header header
  string child_frame_id
  geometry_msgs/PoseWithCovariance pose
  geometry_msgs/TwistWithCovariance twist

srv文件分爲請求和響應兩部分,由’—’分隔。

int64 A
int64 B
---
int64 Sum

其中 A 和 B 是請求, 而Sum 是響應。

使用 msg

創建一個 msg

創建完.msg文件後,爲了確保msg文件被轉換成爲C++、Python和其他語言的源代碼,package.xml要包含一下兩條語句:

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

然後在 CMakeLists.txt文件中,利用find_packag函數,增加對message_generation的依賴,這樣就可以生成消息了。

# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

同樣,你需要確保你設置了運行依賴:

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

並且,找到如下代碼塊:

# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

去掉註釋符號#,用你的.msg文件替代Message*.msg。
最後,我們要確保CMake知道在什麼時候重新配置我們的project。 確保添加了如下代碼:
generate_messages()

使用 rosmsg

通過rosmsg show命令,檢查ROS是否能夠識消息。
$ rosmsg show [message type]

使用 srv

創建一個srv

從其他的package中複製一個服務:
$ roscp [package_name] [file_to_copy_path] [copy_path]
同msg文件類似,你也需要在package.xml和CMakeLists.txt文件中做一些修改。

使用 rossrv

同樣可以通過rosmsg show命令,檢查ROS是否能夠識該服務。
$ rossrv show <service type>

msg和srv都需要的步驟

在CMakeLists.txt中找到如下部分:

# generate_messages(
#   DEPENDENCIES
# #  std_msgs  # Or other packages containing msgs
# )

去掉註釋並附加上所有你消息文件所依賴的那些含有.msg文件的package(這個例子是依賴std_msgs,不要添加roscpp,rospy),結果如下:

generate_messages(
  DEPENDENCIES
  std_msgs
)

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

獲得幫助

$ rosmsg -h
同樣也可以獲得子命令的幫助:
$ rosmsg show -h

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

編寫發佈器節點

mkdir -p ~/catkin_ws/src/beginner_tutorials/src 這個文件夾將會用來放置 beginner_tutorials package 的所有源代碼。

編寫訂閱器節點

編譯節點

修改CMakeLists.txt文件,添加:

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})

這會生成兩個可執行文件, talker 和 listener, 默認存儲在~/catkin_ws/devel/lib/ 中.

然後要爲可執行文件添加對生成的消息文件的依賴:
add_dependencies(talker beginner_tutorials_generate_messages_cpp)
這樣就可以確保自定義消息的頭文件在被使用之前已經被生成。

運行catkin_make

寫一個簡單的消息發佈器和訂閱器 (Python)

Writing the Publisher Node

The Code

create a ‘scripts’ folder to store our Python scripts:mkdir scripts && cd scripts
編寫.py並改變其爲可執行文件:$ chmod +x talker.py

The Code Explained

Writing the Subscriber Node

類似

Building your nodes

Go to your catkin workspace and run catkin_make:

測試消息發佈器和訂閱器

啓動發佈器

運行roscore
如果使用catkin,確保你在調用catkin_make後,在運行你自己的程序前,已經source了catkin工作空間下的setup.sh文件
啓動a publisher called “talker”:

$ rosrun beginner_tutorials talker      (C++)
$ rosrun beginner_tutorials talker.py   (Python) 

啓動訂閱器

運行一個名爲”listener”的訂閱器節點:

$ rosrun beginner_tutorials listener     (C++)
$ rosrun beginner_tutorials listener.py  (Python) 

編寫簡單的服務器和客戶端 (C++)

編寫Service節點

編寫Client節點

編譯節點

CMakeLists.txt添加如下代碼:

add_executable(add_two_ints_server src/add_two_ints_server.cpp)
target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
add_dependencies(add_two_ints_server beginner_tutorials_gencpp)
add_executable(add_two_ints_client src/add_two_ints_client.cpp)
target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
add_dependencies(add_two_ints_client beginner_tutorials_gencpp)

然後運行catkin_make命令將生成兩個可執行程序”add_two_ints_server”和”add_two_ints_client”,這兩個可執行程序默認被放在~/catkin_ws/devel/lib/share/。你可以直接調用可執行程序,或者使用rosrun命令去調用它們。

編寫簡單的Service和Client (Python)

Writing a Service Node

The Code

Don’t forget to make the node executable:
chmod +x scripts/add_two_ints_server.py

The Code Explained

Writing the Client Node

The Code

The Code Explained

Building your nodes

run catkin_make

Try it out!

In a new terminal, run

$ cd ~/catkin_ws
$ . devel/setup.bash
$ rosrun beginner_tutorials add_two_ints_server.py

In a new terminal, run

$ cd ~/catkin_ws
$ . devel/setup.bash
$ rosrun beginner_tutorials add_two_ints_client.py 4 5

## 測試簡單的Service和Client
### 運行Service

$ rosrun beginner_tutorials add_two_ints_server     (C++)
$ rosrun beginner_tutorials add_two_ints_server.py  (Python)

### 運行Client

$ rosrun beginner_tutorials add_two_ints_client 1 3     (C++)
$ rosrun beginner_tutorials add_two_ints_client.py 1 3  (Python)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章