ROS官网初级教程学习总结(10-16)
来源:互联网 发布:造价工程师网络教育 编辑:程序博客网 时间:2024/06/08 17:09
教程网址: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 Aint64 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 linefind_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)
- ROS官网初级教程学习总结(10-16)
- ROS官网初级教程学习总结(1-4)
- ROS官网初级教程学习总结(5-9)
- ROS官网初级教程学习总结(17-20)
- ROS官网中级教程学习总结(1-6)
- ros官网学习资料总结
- ROS学习资料总结
- ROS学习资料总结
- ROS学习总结
- ROS机器人操作系统的安装、配置与初级教程 16
- ROS机器人操作系统的安装、配置与初级教程 10
- ROS学习总结(1)--入门、学习路线
- ROS 总结(一):ROS系统框架
- ROS探索总结(五)学习遇到的问题
- ROS学习(二)server和client的编写总结
- ROS学习过程中遇到的问题总结(一)
- (W3C学习笔记)网站构建 初级教程
- (W3C学习笔记)WWW 初级教程
- Vijos P1398 奖学金【排序】
- 删除几天前的文件
- javascript构造函数
- eight
- day_08函数
- ROS官网初级教程学习总结(10-16)
- MSFT_NetAdapter修改网卡名
- 2017年5月历史文章汇总
- 2017年6月历史文章汇总
- 2017年7月历史文章汇总
- 慕课网学习spring入门篇-Spring Bean装配(下)
- POJ 3148 ASCII Art 笔记
- QNX开发最完整图文教程
- QNX学习——QNX的初步探索以及开发环境的搭建