ros1+docker环境快速搭建
快速使用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 CvBridgebag_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