快速使用python 解析ros1的bag消息ros这个东西可以说安装起来非常麻烦的,费时费力,很可能还安装不成功,特别是我的环境是ubuntu22.04 ,官方都不支持安装ros1。因此一个可行且快速的方法是使用别人配置好的ros的docker环境

一、下载ros1的docker

docker pull osrf/ros:noetic-desktop-full

宿主机开启xhost,使得docker里面可视化界面

xhost +

注意:每次重启容器,主机都得执行一遍,否则容器内可视化报错。

创建容器,挂载数据容器卷,进入docker

docker run -it -v /home/dell/noetic_container_data_1:/data --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY" --env="QT_X11_NO_MITSHM=1" --name=noetic_ros_2 osrf/ros:noetic-desktop-full  /bin/bash
docker run -it -v /mnt/xxx/home/xxx-xxx:/home/xxx-xxx -v /data:/data -v  --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY" --env="QT_X11_NO_MITSHM=1" --name=noetic_ros_2 osrf/ros:noetic-desktop-full  /bin/bash

必须加上:

--env="QT_X11_NO_MITSHM=1"

否则docker内部无法可视化(主机必须先执行 xhost + 命令)

如果从vscode中进行调试,则需要输入

source /opt/ros/noetic/setup.bash

下次直接进去

docker start noetic_ros_2
docker exec -it noetic_ros_2 /bin/bash
source /opt/ros/noetic/setup.bash
cd /home/xxx-xxx/work/python_project/25_0317_rosbag_jiexi

python3 代码.py
解析图像

# -*- coding: utf-8 -*-
import sys
import rosbag
import cv2
from cv_bridge import CvBridge

bag_path = "/data/25_0317_rosbag_jiexi/104004_0.bag"
bridge = CvBridge()

try:
    with rosbag.Bag(bag_path, "r") as bag:
        for topic, msg, t in bag.read_messages('/sensor/camera_front_far/image_desensitized/compressed'):
            print("运行到行号:", sys._getframe().f_lineno)
            try:
                # 将压缩图像消息转换为OpenCV格式
                cv_image = bridge.compressed_imgmsg_to_cv2(msg, "bgr8")
                # 显示图像(可选)
                cv2.imshow("Image", cv_image)
                cv2.waitKey(1)

                image_filename = f"/data/output/image_{t.to_nsec()}.jpg"
                cv2.imwrite(image_filename, cv_image, [cv2.IMWRITE_JPEG_QUALITY, 100])

                print(f"成功保存图像: {image_filename}")
                # 这里可以添加更多的图像解析和处理代码
                print("成功解析图像")
            except Exception as e:
                print(f"解析图像时出错: {e}")

except Exception as e:
    print(f"打开ROS bag文件时出错: {e}")

cv2.destroyAllWindows()

解析成功
在这里插入图片描述

进入docker中使用vscode调试python代码

在这里插入图片描述

然后打开工程,即可正常调试。

参考文章:

1、https://docs.docker.com/engine/install/ubuntu/
2、https://blog.csdn.net/weixin_45897172/article/details/131599195

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐