1.话题通信
发送方
- 要执行的文件内容
- 包含头文件
- 初始化节点
- 实例化ros句柄
- 实例化 发布者 对象
- 组织被发布的数据,并编写逻辑发布数据
- 步骤
- 编写完执行的文件
- 如果是python,需要添加可执行权限(终端下进入 scripts 执行:
chmod +x *.py)
- 修改CMakeLists(c++:add_executable(文件映射的名称 src/文件名);target_link_libraries(文件映射的名称 ${catkin_LINRARIES});python:catkin_install_python())
- 编译一下看能否通过
- roscore
- source ./devel/setup.bash
- rosrun 文件包 文件
接收方
- 要执行的文件内容
- 包含头文件
- 编写回调函数
- 初始化节点
- 实例化ros句柄
- 实例化 订阅者 对象
- 编写接收数据和处理回调函数(spin)
- 步骤
- 编写完执行的文件
- 如果是python,需要添加可执行权限(终端下进入 scripts 执行:
chmod +x *.py)
- 修改CMakeLists
- 编译一下看能否通过
- roscore
- source ./devel/setup.bash
- rosrun 文件包 文件
如果添加的信息时自定义的信息
定义msg文件
编辑配置文件
package.xml以及CmakeLists.txt中添加编译依赖与执行依赖
<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )
add_message_files( FILES Person.msg )
generate_messages( DEPENDENCIES std_msgs )
catkin_package( # INCLUDE_DIRS include # LIBRARIES plumbing_pub_sub CATKIN_DEPENDS roscpp rospy std_msgs message_runtime # DEPENDS system_lib )
add_dependencies(demo01_pub_person ${PROJECT_NAME}_generate_messages_cpp) add_dependencies(demo01_sub_person ${PROJECT_NAME}_generate_messages_cpp)
add_executable(demo01_pub_person src/demo01_pub_person.cpp) add_executable(demo01_sub_person src/demo01_sub_person.cpp)
target_link_libraries(demo01_pub_person ${catkin_LIBRARIES} ) target_link_libraries(demo01_sub_person ${catkin_LIBRARIES} )
!注意:在这里需要配置vscode的环境
- 点击src下include,右击在终端打开,输入pwd,复制路径
- 将路径写入.vscode下面的c_cpp_properties.json的includePath里面
2.服务通信
服务端(先启动)与客户端
master根据话题实现server与client的连接
自定义srv
- 定义srv文件(请求和响应使用
---
分割)- 编辑配置文件
- package.xml中添加编译依赖与执行依赖(同上)
- CMakeLists.txt编辑 srv 相关配置
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation ) # 需要加入 message_generation,必须有 std_msgs add_service_files( FILES AddInts.srv ) generate_messages( DEPENDENCIES std_msgs )
- ctrl+shift+b编译检查
- vscode配置(c++:c_cpp_properies.json;python:settings.json)
服务端
- 要执行的文件内容
- 包含头文件
- 编写回调函数(doNums(plumbing_server_client::Addints::Request &request,
plumbing_server_client::Addints::Response &response){//处理请求(获取的数据) //组织响应(要对获取到的数据做什么,类似求和)})- 初始化节点
- 实例化ros句柄
- 实例化 服务 对象(包含要处理的回调函数)
- ros::spin
客户端
- 包含头文件
- 初始化节点
- 实例化ros句柄
- 实例化 客户端 对象(要与服务端有一样的话题)
- 组织请求(可以为设置发送数据的值)
- 处理响应
配置CMakeLists.txt
add_executable(demo01_server src/demo01_server.cpp)
add_executable(demo01_client src/demo01_client.cpp)
add_dependencies(demo01_server ${PROJECT_NAME}_gencpp)
add_dependencies(demo01_client ${PROJECT_NAME}_gencpp)
target_link_libraries(demo01_server
${catkin_LIBRARIES}
)
target_link_libraries(demo01_client
${catkin_LIBRARIES}
)