ros2小白学习之路——通信机制

1.话题通信

发送方
  • 要执行的文件内容
  1. 包含头文件
  2. 初始化节点
  3. 实例化ros句柄
  4. 实例化 发布者 对象
  5. 组织被发布的数据,并编写逻辑发布数据
  • 步骤
  1. 编写完执行的文件
  2. 如果是python,需要添加可执行权限(终端下进入 scripts 执行:chmod +x *.py)
  3. 修改CMakeLists(c++:add_executable(文件映射的名称 src/文件名);target_link_libraries(文件映射的名称  ${catkin_LINRARIES});python:catkin_install_python())
  4. 编译一下看能否通过
  5. roscore
  6. source ./devel/setup.bash
  7. rosrun 文件包 文件
接收方
  • 要执行的文件内容
  1. 包含头文件
  2. 编写回调函数
  3. 初始化节点
  4. 实例化ros句柄
  5. 实例化 订阅者 对象
  6. 编写接收数据和处理回调函数(spin)
  • 步骤
  1. 编写完执行的文件
  2. 如果是python,需要添加可执行权限(终端下进入 scripts 执行:chmod +x *.py)
  3. 修改CMakeLists
  4. 编译一下看能否通过
  5. roscore
  6. source ./devel/setup.bash
  7. 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的环境

  1. 点击src下include,右击在终端打开,输入pwd,复制路径
  2. 将路径写入.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}
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值