当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/186752.html

相关文章:

  • postgresql主从集群一键搭建脚本分享
  • 人工智能领域1-4区所有SCI汇总!
  • springCloud/Alibaba常用中间件之Setinel实现熔断降级
  • ctfshow——web入门351~356
  • WebGL图形编程实战【6】:性能优化 × 调试工具与技巧精讲
  • 基于FastAPI框架的日志模块设计
  • STM32入门教程——GPIO输出
  • 信息瓶颈理论(Information Bottleneck Theory)中的“最小化信息”是否意味着“最大化抽象能力”?
  • 【超详细教程】安卓模拟器如何添加本地文件?音乐/照片/视频一键导入!
  • Spring的异步
  • Linux系统管理与编程19:自动部署dns
  • 激光雷达点云畸变消除:MCU vs CPU 方案详解
  • 动态类加载方式引入第三方资源jar包
  • 转运机器人可以绕障吗?
  • 前苹果首席设计官回顾了其在苹果的设计生涯、公司文化、标志性产品的背后故事
  • dockerfile: PaddleOCR hubserving api 服务
  • 物联网驱动的共享充电站系统:智能充电的实现原理与技术解析!
  • 【NextPilot日志移植】日志写入流程
  • 智能SQL优化工具集成:从概念到实践
  • 二进制中1的个数
  • JWT的介绍与在Fastapi框架中的应用
  • OpenCV 的 CUDA 模块中用于将一个多通道 GpuMat 图像拆分成多个单通道图像的函数split()
  • OSI 7层模型
  • cURL:通过URL传输数据的命令行工具库介绍
  • 51单片机引脚功能概述
  • QT5.14安装以及新建基础项目
  • 保持Word中插入图片的清晰度
  • Linux文件编程——read函数与lseek函数
  • 关于读写锁的一些理解
  • 使用 Comparator 和 Comparable 对集合排序:如何轻松排序 Java 集合?