ROS2 中 使用奥比中光 Orbbec Astra Pro 深度相机

news/2025/2/22 10:55:16

本文将以 Ubuntu 20.04 和 ROS2 foxy 环境为例,详细介绍如何在 ROS2 中使用奥比中光 Orbbec Astra Pro 深度相机。在这一篇文章中,你会学到如何创建工作空间,使用 usb_cam 功能包,编译安装使用 ros_astra_camera 等。

文章目录

  • 1. 引言
    • 1.1 视觉传感器
    • 1.2 常见的视觉传感器
  • 在 ROS 中使用
    • 普通摄像头
      • 安装
      • 测试
    • RGB-D 摄像头
      • 操作前准备
      • 编译依赖安装
      • 编译安装 ros_astra_camera
      • 测试

1. 引言

前面的文章《ROS2 机器人操作系统入门和安装以及如何使用 .NET 进行开发》中提到,组成机器人的关键部分主要是电机、传感器、软件和电池。机器人的智能感知主要通过视觉传感器,视觉传感器对于机器人来说,就像人类之于眼睛的关系,可说非常重要。那么如何通过 ROS 获取远端机器人的摄像机传感器的图像信息呢?

1.1 视觉传感器

视觉传感器是机器人的一种常用传感器,用于检测机器人周围的环境信息,并将其转化为机器人可以理解的信息。机器人视觉传感器可以分为两类:光学传感器和摄像机传感器。

光学传感器是通过检测周围环境的光线强度变化来获取信息的。常见的光学传感器有激光雷达传感器、光敏电阻传感器等。

摄像机传感器是通过摄像头来获取信息的。摄像机传感器可以分为两类:彩色摄像机传感器和黑白摄像机传感器。彩色摄像机传感器可以检测周围环境的颜色信息,而黑白摄像机传感器只能检测周围环境的亮度信息。

深度相机是一种特殊的视觉传感器,它可以在图像中测量每个像素点的深度信息。通常,深度相机使用激光或其他方法来测量物体到相机的距离,并在图像中标记出来。这样,机器人就可以通过深度相机获取到周围环境中物体的三维信息。

机器人视觉传感器在机器人导航、物品检测、物品抓取等方面有着广泛的应用。例如,机器人可以通过视觉传感器来识别路径,然后按照规划的路径导航;机器人也可以通过视觉传感器来检测周围环境中的物品,然后通过机械臂或其他装置进行物品抓取。

1.2 常见的视觉传感器

USB 摄像头是一种常见的视觉传感器,通过USB接口连接到计算机或嵌入式设备,实现图像采集和传输。这类摄像头具有易于安装、兼容性好、成本相对较低等优点,广泛应用于计算机视觉、机器人导航、人脸识别等领域。

在 ROS 中使用这一类设备非常简单,我们可以直接通过 usb_cam 功能包来驱动它,获取 USB 摄像头的二维图像数据,这一系列的文章,我们也从这类设备开始。

对于此功能包的测试我们能可以直接使用 Orbbec Astra Pro 深度相机,因为其和普通的 USB 摄像头一样,遵循 UVC(USB Video Class)协议,可以直接免驱使用。在 Ubuntu 20.04 中我们可以通过系统自动的应用“茄子”直接打开看到摄像头画面。

请添加图片描述

在 ROS 中使用

普通摄像头

安装

对于 usb_cam 功能包的安装,我们可以使用直接使用 apt 来安装:

sudo apt install ros-foxy-usb-cam

也可以使用源码进行编译安装,但是不建议尝试。

测试

安装完成后,使用下面的命令启动节点:

ros2 run usb_cam usb_cam_node_exe

然后即可在 rqt 的插件 Image View 中查看或者通过 rviz2 查看 /image_raw 话题发布的图像信息。

请添加图片描述

另外,根据控制台我们可以看到程序启动会加载用户目录的配置文件 ~/.ros/camera_info/default_cam.yaml ,若不存在,则会使用 /opt/ros/foxy/share/usb_cam/config/params.yaml 这个配置文件,默认使用摄像头设备为 /dev/video0。关于详细的配置和参数设置可以前往 ROS wiki usb_cam 查询。

RGB-D 摄像头

奥比中光 Orbbec Astra Pro 是一款 RGB-D 摄像头,在许多场景下,我们可以利用它获取更丰富的环境信息。

操作前准备

在操作前我们需要先创建好自己的 ROS 工作空间,如果你已经拥有了自己的工作空间,可以跳过这一步骤。

创建一个新的文件夹来作为工作空间的根目录,名字可以自定义。在该文件夹中创建一个名为 “src” 的子文件夹,用于存放工作空间中的软件包。例如:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

然后需要前往奥比中光官网下载最新的ROS2 SDK 驱动包。虽然有个 orbbec/ros_astra_camera 的github仓库的ros2-development分支,但内容不是最新的,需要去官网下载。

下载后上传到 ~/ros2_ws/src ,执行解压缩:

tar -zxvf OpenNI_SDK_ROS2_v1.0.2_20220809_b32e47_linux.tar.gz -C src

编译依赖安装

编译前,需要安装好一些编译所需要的依赖:

sudo apt install libgflags-dev nlohmann-json3-dev ros-foxy-image-transport ros-foxy-image-publisher

安装 glog,这个是谷歌的日志记录模块。

cd ~/ros2_ws
wget -c https://github.com/google/glog/archive/refs/tags/v0.6.0.tar.gz  -O glog-0.6.0.tar.gz
tar -xzvf glog-0.6.0.tar.gz
cd glog-0.6.0
mkdir build && cd build
cmake .. && make -j6
sudo make install
sudo ldconfig
cd ~/ros2_ws
rm glog-0.6.0 -rf
rm glog-0.6.0.tar.gz

安装 magic_enum

wget -c https://github.com/Neargye/magic_enum/archive/refs/tags/v0.8.2.tar.gz -O  magic_enum-0.8.2.tar.gz
tar -xzvf magic_enum-0.8.2.tar.gz
cd magic_enum-0.8.2
mkdir build && cd build
cmake .. && make -j6
sudo make install
sudo ldconfig
cd ~/ros2_ws
rm magic_enum-0.8.2 -rf
rm magic_enum-0.8.2.tar.gz

安装 libuvc

git clone https://github.com/libuvc/libuvc.git
cd libuvc
mkdir build && cd build
cmake .. && make -j6
sudo make install
sudo ldconfig
cd ~/ros2_ws
rm libuvc -rf

ros_astra_camera_139">编译安装 ros_astra_camera

在编译前先按照说明处理 libusb 的一些规则。执行 install.sh

cd ~/ros2_ws/src/ros2_astra_camera/astra_camera/scripts
sudo bash install.sh
sudo udevadm control --reload-rules && sudo udevadm trigger

然后转到工作目录,开始编译:

cd ~/ros2_ws
colcon build --event-handlers  console_direct+  --cmake-args  -DCMAKE_BUILD_TYPE=Release

整体编译速度还是非常快的,等待编译完成即可:

请添加图片描述

注意:如果你在看本教程之前尝试过编译 astra_camera 并出现问题,则需要先清理该工作目录的 buildinstall

测试

首先使环境生效,启动相机节点:

source ~/ros2_ws/install/setup.bash
ros2 launch astra_camera astra_mini.launch.py

然后另开一个控制台,打开 rviz2 添加一个 Image 控件选择 /camera/depth/image_raw 话题或者直接通过该话题创建 Image 控件。需要注意的是:下图的三个 Policy 设置均需选择为 System Default 否则不会显示画面。

请添加图片描述


http://www.niftyadmin.cn/n/318211.html

相关文章

leecode255——二叉树的所有路径代码及示例

🔎递归法: 既然是递归法,递归三部曲: (1)确定终止条件: 对二叉树的路径,遍历到叶子节点结束。本题要找到叶子节点才开始处理后续流程,那什么时候算是找到了叶子节点,即…

C语言——数据类型

1. 变量 1.1变量的概念 变量就是在程序中可以发生变化的量,变量有类型。 变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。(1字节8位) 1.2定义格式 存储类型 数据类型 变量名;例如:(auto) int a; 变量名是标识…

conda故障处理

【已解决】subprocess-exited-with-error 准备元数据(setup.py)…错误 错误:subprocess-exited-with-error python setup.py egg_info运行失败。 │退出代码:10 <╰>[1行输出] 请指定——curl-dir/path/to/built/libcurl [输出结束] 注意:此错误源自子进程&#xf…

【.NET基础加强第九课--事件】

.NET基础加强第九课--事件 Event 关键字委托,事件对比举例: 音乐播放事件用户对象&#xff0c;登录程序集反射 Event 关键字 委托,事件对比 委托是一种数据类型&#xff0c;可以用调用。 事件:对象&#xff08;对委托的一种封闭装&#xff09;。只能在类内部&#xff0c;只能…

货运物流小程序开发功能有哪些?

移动互联网的深入发展让网购等线上交易更加盛行&#xff0c;货运快递物流也随之增多&#xff0c;成为我们日常生活的重要组成部分。传统的货运物流管理主要依赖人工&#xff0c;不仅效率慢还容易出错。随着市场的发展以及人们对服务质量要求的提高&#xff0c;现在很多中大型货…

[元带你学NVMe] NVMe 1.4新特性:首选写入对齐与粒度

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe 1.4为固态硬盘提供了一种新能力,它可以向上层操作系统与驱动程序报告首选写入对齐与写入粒度信息。虽然固态硬盘的4K对齐已经广为人知,但大…

Springmvc练习二

1、网站练习&#xff0c;先清楚原理&#xff0c;便于拓展 注意一点就是页面定位的问题&#xff0c;如果你springmvc文件没有配置加上后缀“.jsp”的设置记得在网站控制器源代码的基础上加上“.jsp” 2、简单尝试一下就知道&#xff0c;这里所谓的参数绑定无非就是在java代码的…

【Python入门篇】——Python中循环语句(while循环的基础语法和基础案例)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…