ros2内结合gazebo和rviz进行yolov8检测记录

前提:第一次接触ros2, 遇到的问题解决方式不一定准确,只是这次我尝试成功了,想和大家分享一下。

ubuntu20.04系统

目录

1. ros2

1.1 ros2是啥?

1.2 ros2的版本和ubuntu版本的对应关系,当下入门尤其是ubuntu20.04系统从哪个版本开始?

1.3 对应版本的安装

1.4 ros2 入门命令的一些理解

2 ros2内结合gazebo和rviz进行yolov8检测记录

2.1 在github 搜索 ros2 ultralytics

 2.2 安装使用

2.3 在安装pathfinder时学习到的只是和运行遇到的bug和解决办法,如下:问题1:AttributeError: 'module' object has no attribute 'Interpreter'

参考链接:AttributeError: 'module' object has no attribute 'Interpreter' · Issue #63 · ros/genmsg · GitHub问题2:No module named 'roslaunch'

问题3:No module named 'vision_msgs'

问题4:no module named msg

问题5:SetuptoolsDeprecationWarning: setup.py install is deprecated

问题6:PackageNotFoundError: "package 'gazebo_ros' not found

问题7:cannot get plugin param value for wait_at_waypoint

问题8:package slam-toolbox not found

问题9:package m-explore not found

问题10:package pathfinder not found

3. ROS入门

3.1 ROS开发常用工具Rviz和Gazebo

gazebo详解:ROS入门(三):gazebo详解 - 知乎

3.2 ROS软件包的“启动文件”,即launch文件。

(1)XPath 语法

(2).sdf, .urdf, .xacro三种文件后缀的关系

(3)gazebo_ros_pkgs

(4)gz-sim

问题11:question: incompatible QoS

问题12:question: RuntimeError: CUDA error: no kernel image is available for execution on the device


1. ros2

1.1 ros2是啥?

ROS/ROS 2并不是一个软件,而是一系列软件的集合。包含如硬件驱动程序、网络模块、通信架构和机器人算法实现等等。

ROS并不是一个操作系统,而一般称之为元操作系统,即基于操作系统以上的类操作系统

参考链接:

ROS/ROS 2 介绍

一、ROS2简介_高自期许的博客-CSDN博客

1.2 ros2的版本和ubuntu版本的对应关系,当下入门尤其是ubuntu20.04系统从哪个版本开始?

参考阅读的文档 ,一般目前ubuntu20.04系统说 galactic或foxy版本:

galactic 是 使用最顺畅的ros2版本,建议从这个版本开始。

foxy版本是长期支持的版本, 未来还会有更强大的的版本。可以慢慢升级。

参考链接:

1.3 对应版本的安装

galactic 官方安装指南连接:Ubuntu (Debian) — ROS 2 Documentation: Galactic documentation

(1)问题1:ubuntu系统下anaconda3和ros不共存解决办法ubuntu系统下anaconda3和ros不共存
        会报:Import Error:No module named rospkg

        解决办法:参考链接:ROS - 汇总ROS与Anaconda冲突的解决办法_wx60ee4c080349a的技术博客_51CTO博客

(2)问题2:就是在安装时遇到过网络连接不好?

        解决办法:上网搜搜设置源

(3)问题3:在运行rosdep那一步时报的如下错误:

ERROR: default sources list file already exists:etc/ros/rosdep/sources.list.d/20-default.list

        解决办法: 

$ sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
$ sudo rosdep init
$ rosdep update

1.4 ros2 入门命令的一些理解

$ . ~/ros2_galactic/install/local_setup.bash
$ ros2 run demo_nodes_cpp talker

其中, 这个命令对应的是  /opt/ros/galactic/lib/demo_nodes_cpp/talker 路径

(1) teleop_twist_keyboard 命令:这个命令在gazebo运行时, 在终端输入

$ ros2 run teleop_twist_keyboard teleop_twist_keyboard

会显示,然后,就在这个终端界面按键盘上的字符可以控制小车或者机器人的移动。

2 ros2内结合gazebo和rviz进行yolov8检测记录

2.1 在github 搜索 ros2 ultralytics

得到三个repos,然后最后一个结合了gazebo可以添加一些静态模型仿真。

 2.2 安装使用

参考链接:https://github.com/hcdiekmann/ultralytics_ros2

                 https://github.com/hcdiekmann/pathfinder
 

2.3 在安装pathfinder时学习到的只是和运行遇到的bug和解决办法,如下:

问题1:AttributeError: 'module' object has no attribute 'Interpreter'

解决办法:

$ pip uninstall em
$ pip install empy

参考链接:AttributeError: 'module' object has no attribute 'Interpreter' · Issue #63 · ros/genmsg · GitHub

问题2:No module named 'roslaunch'

 $ sudo apt install python3-roslaunch

问题3:No module named 'vision_msgs'

$ sudo apt-get install ros-galactic-vision-msgs

问题4:no module named msg

解决办法:参考链接:no module named msg 解决方法_no module named 'vision_msgs_豌豆生的博客-CSDN博客

问题5:SetuptoolsDeprecationWarning: setup.py install is deprecated

解决办法:降档使用setuptools

$ pip install setuptools==58.2.0

参考链接:玩转ROS2的填坑之路-SetuptoolsDeprecationWarning: setup.py install is deprecated_腾腾任天真的博客-CSDN博客

问题6:PackageNotFoundError: "package 'gazebo_ros' not found

解决办法:通过命令apt进行安装gazebo_ros',这托托的是因为我不知道导致一开始没安装。

$ sudo apt install ros-galactic-gazebo-*

参考链接:ROS2-Gazebo仿真_ros2安装gazebo_zzw-111-bit的博客-CSDN博客

问题7:cannot get plugin param value for wait_at_waypoint

解决办法:

$ sudo apt install ros-galactic-navigation2
$ sudo apt install ros-galactic-nav2-bringup
$ sudo apt install ros-galactic-turtlebot3-gazebo

参考链接:

【ROS】ROS2导航Nav2:简介、安装、测试效果、错误处理_郭老二的博客-CSDN博客

问题8:package slam-toolbox not found

解决办法:

$ sudo apt-get install ros-galactic-slam-toolbox

参考链接:ROS2与SLAM入门教程-slam-toolbox建图 - 创客智造/爱折腾智能机器人

问题9:package m-explore not found

解决办法:

$ sudo apt install ros-galactic-multirobot-map-merge
$ sudo apt install ros-galactic-explore_lite

参考链接:GitHub - hrnr/m-explore: ROS packages for multi robot exploration

问题10:package pathfinder not found

解决办法:

# /opt/ros/galactic/lib/python3.8/site-packages/xacro/__init__.py

def eval_extension(s):
    if s == '$(cwd)':
        return os.getcwd()

# 变成

def eval_extension(s):
    # if s == '$(cwd)':
    return os.getcwd()

3. ROS入门

Rviz需要已有的数据,而Gazebo可以创造数据。

我们可以在Gazebo中创建一个机器人世界,不仅可以仿真机器人的运动功能,还可以仿真机器人的传感器数据,而这些数据就可以放到Rviz中显示,所以使用gazebo的时候,经常也会和rviz配合使用。

机器人操作系统(ROS)提供了Gazebo与RViz两个仿真环境其各有各的用处,Gazebo多用于仿真环境的搭建如房间、马路等, RViz多用于传感器的配置如摄像头、激光雷达等。

3.1 ROS开发常用工具Rviz和Gazebo

gazebo详解:ROS入门(三):gazebo详解 - 知乎

3.2 ROS软件包的“启动文件”,即launch文件。

问题11:question: incompatible QoS

New publisher discovered on topic '/camera/image_raw', offering incompatible QoS. No messages will be sent to it. Last incompatible policy: RELIABILITY_QOS_POLICY

解决办法:

[ROS2] QOS profile options and subscribing problem · Issue #187 · ros-visualization/rqt · GitHub

Ros2 Galactic Nav2 - /scan offering incompatible QoS - ROS Answers: Open Source Q&A Forum

问题12:question: RuntimeError: CUDA error: no kernel image is available for execution on the device

解决办法:

shell  : $ export CUDA_VISIBLE_DEVICES=""

 

 

1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值
ROS 2 (Robot Operating System) 中,Gazebo 是一个常用的模拟环境,而 RVIZ2 是一个用于视觉化的工具。为了让 Gazebo 生成的模型和地形在 RVIZ2 中显示为地图,你需要按照以下步骤操作: 1. **安装必要的包**: 确保已经安装了 `rclcpp`, `tf2_ros`, `ament_cmake_gtest`, `gazebo_ros`, 和 `ros2_rviz_plugin` 等依赖包。 2. **创建世界文件**: 使用 Gazebo 的 `.world` 文件格式,在其中添加地形和静态模型。例如,你可以通过 `model://` 命令引用预设的 gazebo 模型,或者自定义模型并指定其位置、大小等属性。 3. **启动 Gazebo**: 运行 `gzserver` 命令启动 Gazebo,并加载你的世界文件,例如: ``` gzserver -s world_file.urdf ``` 4. **生成地图数据**: Gazebo 通常不会直接生成 RVIZ 可用的地图数据,但可以利用 `map_server` 包将 Gazebo 的静态地图转换为 `yaml` 格式的 nav_msgs/MapServer 或 nav_msgs/OccupancyGrid 数据。这需要在 Gazebo 内部配置一些插件如 `gazebo_ros_plugins` 的 static_map_publisher。 5. **将地图发布到话题**: 通过运行类似下面的命令,将地图数据发布到 RVIZ2 可以订阅的主题上: ``` roslaunch gazebo_ros static_map.launch world:=world_file.urdf ``` 这会发布 `/map` 或 `/odom`(取决于你选择的地图数据类型)的话题。 6. **在 RVIZ2 中查看地图**: 启动 RVIZ2 并添加一个 "Occupancy Grid" 或 "Map" 组件,连接到刚才发布的地图主题,就可以看到 Gazebo 生成的地形在 RVIZ2 中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值