【ROS 最简单教程 013/300】ROS 话题通信 -- 自定义消息

在这里插入图片描述

ROS 通信机制:ROS是进程(也称为 Nodes)的分布式框架。 这些进程甚至还可分布于不同主机协同工作,所以结点之间如何通信非常重要!

⭐ 基本通信机制一:话题通信(发布订阅模式) 【用于不断更新的、少逻辑处理的数据传输场景】 👉话题通信理论图解必懂 指路
  • ROS Master 负责保管 Talker 📢和 Listener 注册的信息,并匹配话题相同的 Talker📢 与 Listener 👂
  • 帮助 Talker 📢与 Listener 👂 建立连接
  • 连接建立后,Talker 📢 可以发布消息,发布的消息会被 Listener 👂订阅

自定义 message 的三步实现:创建 msg 文件 → 编辑配置文件 → 编译

💜 根据需求创建 msg 文件 msgxxx.msg

正确路径:工作空间 / src / 功能包 / msg / msgxxx.msg 👉 ROS 文件结构指路

  • 每行包括字段类型和字段名称;可选择的字段类型如下:
    • int8, int16, int32, int64 (或者无符号类型: uint*)
    • float32, float64
    • string
    • time, duration
    • other msg files
    • variable-length array[] and fixed-length array[C]
  • 示例 person.msg 内容如下:
    string name
    uint16 age
    

💜 编辑配置文件

package.xml 中添加编译依赖与执行依赖

正确路径:工作空间 / src / 功能包 / package.xml 👉 ROS 文件结构指路

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
修改 CMakeLists.txt

正确路径:工作空间 / src / 功能包 / CMakeLists.txt 👉 ROS 文件结构指路

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs  # 需要加入 message_generation,必须有 std_msgs
  message_generation  ##
)

add_message_files(  
  FILES
  msgxxx.msg  ##
)

generate_messages(  # 生成消息时依赖于 std_msgs
  DEPENDENCIES
  std_msgs  ##
)

catkin_package(  # 执行时依赖
#  INCLUDE_DIRS include
#  LIBRARIES demo02_talker_listener
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime  ##
#  DEPENDS system_lib
)
  • 对于 C++,还需要进行多一步的配置 (可执行文件相关配置不熟悉的友友 👉快速体验)
    add_dependencies(可执行文件名称 ${PROJECT_NAME}_generate_messages_cpp)
    

💜 编译后即可正常使用

编译会自动生成:(可自己打开对应目录查看、学习)
  • C ++ 需要调用的中间文件(工作空间 / devel / include / 功能包 / msgxxx).
  • Python 需要调用的中间文件(工作空间 / devel / lib / python3 / dist-packages / 功能包 / msg / msgxxx).

【C++ 版】使用时 #include "功能包名/msgxxx.h",创建实例 功能包名::msgxxx x, x.name=?, x.age=? ... 即可使用消息~)

【python 版】使用时 from pkg.msg import msgxxx,创建实例 x=msgxxx(), x.name=?, x.age=? ... 即可使用消息~)

希望对你有帮助呀!!💜💜 如操作遇到任何问题,欢迎大家留言互助 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【ROS 学习笔记】谢谢你的支持!


另外,使用ROS需要 C++ 或者Python的编程经验,我的博客主页也有相关的教程发布,需要的友友自取!
参考资料ROS理论与实践在线文档B站视频教程

<think>好的,用户遇到了Gazebo进程异常退出的问题,错误代码是255,PID 50732,使用ROS Noetic,运行的是gzserver,涉及到sitl_gazebo和empty.world。需要分析日志并提供解决方案。 首先,根据用户提供的引用内容,引用[1]和[2]都提到了类似的问题,即gzserver进程死亡,退出码255,并建议使用killall命令终止相关进程。这可能是因为之前运行的gzserver或gzclient未正确关闭,导致端口占用或资源冲突。所以,第一个步骤是建议用户执行killall gzserver和killall gzclient,然后重新启动Gazebo。 接下来,用户可能没有正确安装依赖库。引用[3]中提到了在安装PX4 SITL时需要的依赖项,比如ninja-build、protobuf-compiler等。虽然用户的问题不是针对PX4,但依赖缺失可能导致Gazebo无法启动。因此,需要检查并安装常见的Gazebo依赖,尤其是ROS Noetic对应的gazebo_ros_pkgs和相关插件。 然后,环境变量设置错误也可能导致问题。例如,GAZEBO_MASTER_URI或ROS_HOSTNAME不正确,可能导致通信问题。需要用户检查这些变量是否正确配置,并确保网络设置允许本地通信。 模型加载失败也是常见问题,特别是如果用户使用的是自定义世界文件或模型。empty.world虽然简单,但如果路径错误或权限问题,也可能导致Gazebo崩溃。建议用户检查.world文件的路径,并尝试加载默认世界,如使用roslaunch gazebo_ros empty_world.launch来测试。 查看日志文件也是关键步骤。用户提到的日志路径在~/.ros/log下,分析其中的错误信息,如缺少模型、依赖库未找到等,可以更准确地定位问题。例如,如果日志显示无法加载某个插件,可能需要安装对应的ROS包。 硬件加速问题,特别是显卡驱动不支持OpenGL,也可能导致Gazebo黑屏或崩溃。建议用户检查显卡驱动,并尝试使用软件渲染模式,如运行Gazebo时加上--verbose和-libgl-always-software参数,以确认是否是图形问题。 此外,确保ROS环境正确初始化,尤其是在使用SITL(软件在环)时,需要正确source工作空间和ROS的setup.bash文件。用户可能未正确构建工作空间,导致Gazebo插件无法加载,因此建议重新编译工作空间并使用catkin_make或catkin build。 最后,如果所有方法都无效,可能需要完全卸载并重新安装Gazebo和ROS相关包,包括清除~/.gazebo和~/.ros目录中的缓存文件,这些文件有时会损坏导致启动失败。 总结来说,处理这类问题的步骤包括:终止残留进程、安装依赖、检查环境变量、验证模型路径、分析日志、处理图形驱动问题、确保环境正确配置,以及必要时重新安装软件。用户应逐步尝试这些方法,并根据具体错误信息调整解决方案。</think>针对Gazebo进程异常退出的问题(exit code 255),以下是分步解决方案及原因分析: ### 一、直接修复步骤 1. **强制终止残留进程** 在终端执行: ```bash killall gzserver && killall gzclient ``` 此操作可清理未完全退出的Gazebo后台进程[^1][^2] 2. **验证依赖完整性** 安装关键依赖包(ROS Noetic环境): ```bash sudo apt install ninja-build protobuf-compiler libeigen3-dev libgstreamer1.0-dev ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control ``` 3. **检查.world文件路径** 若使用自定义空世界`empty.world`,确认路径有效性: ```bash roscd sitl_gazebo/worlds && ls # 确保empty.world存在 ``` ### 二、深度问题排查 #### 1. 日志分析路径 查看具体错误信息: ```bash less ~/.ros/log/[最新日志目录]/gazebo-2.log ``` 重点关注以下错误模式: - `[Err] [REST.cc:205] Error in REST request` → 网络连接问题 - `Could not load model [...]` → 模型路径缺失 - `Failed to load plugin [...]` → 插件依赖未安装 #### 2. 硬件加速验证 测试OpenGL渲染能力: ```bash glxinfo | grep "OpenGL version" ``` 若无输出或版本低于3.3,需更新显卡驱动或使用软件渲染: ```bash export LIBGL_ALWAYS_SOFTWARE=1 && gazebo --verbose ``` ### 三、SITL环境特殊处理 针对PX4仿真环境: 1. 重新编译Gazebo插件: ```bash cd ~/catkin_ws && catkin clean -y catkin build sitl_gazebo ``` 2. 设置环境变量: ```bash export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/catkin_ws/src/sitl_gazebo/models ``` ### 四、进阶解决方案 若仍失败,尝试: 1. 清除缓存文件: ```bash rm -rf ~/.gazebo/* ~/.ros/log/* ``` 2. 完整重装Gazebo: ```bash sudo apt purge ros-noetic-gazebo* && sudo apt autoremove sudo apt install ros-noetic-desktop-full ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值