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

news2025/1/24 1:23:14

本文将以 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

在编译前先按照说明处理 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.coloradmin.cn/o/521749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

年薪50万的程序员和一般的中学教师相比,被亲戚看不起

我是一名程序员,已经工作五年,年薪大概有50万左右。然后,亲戚家的孩子是博士生,在一所中学教书,自己一年的工资可以抵达五六年的薪资,不过还是被亲戚给鄙视了。 很多人都持有不同的观点。我自己是一名程序…

vue-事件修饰符+键盘事件

事件修饰符 1、prevent&#xff1a; 阻止默认事件&#xff08;或在方法中使用e.preventDefault()&#xff09; <a hrefhttps://blog.csdn.net/weixin_52993364?typeblog click.preventshowInfo>点我</a> 说明&#xff1a;这样点击后就不会发生地址的跳转 2、s…

Linux查找指令 时间查看

date 我们在windows中想要看一下时间&#xff0c;我们可以直接在显示器上看到&#xff0c;但是如果我们用的是linux远程登录软件我们像查看一下时间&#xff0c;我们应该怎么做&#xff1f; 我们直接输入date&#xff0c;我们就可以看到当前的时间&#xff0c;不过这个是系统按…

蚁群算法ACS处理旅行商问题TSP【Java实现】

1. 介绍 蚁群算法是一种群体智能算法&#xff0c;模拟了蚂蚁寻找食物时的行为&#xff0c;通过蚂蚁之间的信息交流和合作&#xff0c;最终实现全局最优解的寻找【是否找得到和迭代次数有关】。 蚁群算法的基本思想是将搜索空间看作一个由节点组成的图&#xff0c;每个节点代表…

Linux awk [-v] {print} 命令

AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。 语法&#xff1a;语法&#xff1a;awk 条件1 {动作 1} 条件 2 {动作 2} … 文件名 awk是处理文本文件的语言&#xff0c;所以要传入文本数据供其处理&#xff08;文件逐行读入&#xff09;&#xff0c;…

合宙Air780e C-SDK开发

Air78e简介 AirXXXE系列模组&#xff0c;是合宙通信基于移芯EC618平台设计研发的新款4G Cat.1模组。 Air780e的资料点击这里打开。 Air78e开发板简介 一代 IPEX 天线连接器&#xff08;选配&#xff09;4G 弹簧天线一个下载/调试串口&#xff0c;两个通用串口IO 口默认电平…

电子电气架构——车辆电子电气架构的网络安全汇总

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本文主要分享关于车辆电子电气架构的网络安全常见隐患和对应现阶段解决办法。 背景信息 不知道是否还记得《速度与激情8》中黑客Cipher通过网络侵入车辆,…

PyTorch2.0向后兼容性和加速效果浅探

前言 在PyTorch2022开发者大会上&#xff0c;PyTorch团队发布了一个新特性——torch.compile&#xff0c;将PyTorch的性能推向了新的高度&#xff0c;称这个新版本为PyTorch2.0。torch.compile的引入不影响之前的功能&#xff0c;其是一个完全附加和可选的功能&#xff0c;因此…

Linux系统调用函数(300多个)

前言&#xff1a;这里只是给出中文描述&#xff0c;方便浏览熟悉&#xff0c;具体情况建议去具体环境&#xff08;Linux系统&#xff09;下执行 1&#xff09;man 2 systemcalls &#xff08;查看所有系统调用函数&#xff09;&#xff1b;2&#xff09;man 2 open &#xff08…

Codeforces Round 872 (Div. 2)

Problem - D2 - Codeforces 思路&#xff1a; 我们设good点到所有k点的距离和为dis。 假设good点不止一个&#xff0c;那么我们good点的dis应该都是相等的&#xff08;废话&#xff09;。设当前点u是good点&#xff0c;如果他往儿子v移动&#xff0c;儿子有w个点属于k&#…

Maven 项目模板学习

目录 Maven 项目模板 什么是 archetype&#xff1f; 使用项目模板 Maven 将询问原型的版本 创建的项目 创建 pom.xml Maven 项目文档 Maven 快照(SNAPSHOT) 什么是快照? 项目快照 vs 版本 app-ui 项目的 pom.xml 文件 Maven 快照(SNAPSHOT)的出现是因为为了如果pom有…

OpenPCDet系列 | 4.4 DataProcessor点云数据处理模块解析

文章目录 DataProcessor模块解析1. mask_points_and_boxes_outside_range2. shuffle_points3. transform_points_to_voxels DataProcessor模块解析 在对batch_data的处理中&#xff0c;经过了point_feature_encoder模块处理后&#xff0c;就轮到了进行data_processor处理。在d…

django路由(多应用配置)

一、配置全局路由 在应用下&#xff0c;定义视图函数views.py from django.http import HttpResponse from django.shortcuts import render# Create your views here.def get_order(request):return HttpResponse("orders应用下的路由") 在项目的urls路由配置中&…

Qt事件传递及相关的性能问题

在使用Qt时&#xff0c;我们都知道能通过mousePressEvent&#xff0c;eventFilter等虚函数的重写来处理事件&#xff0c;那么当我们向一个界面发送事件&#xff0c;控件和它的父控件之间的事件传递过程是什么样的呢&#xff1f; 本文将以下图所示界面为例&#xff0c;结合源码介…

【sentinel】热点规则详解及源码分析

何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某些热点数据中访问频次最高的Top K数据&#xff0c;并对其访问进行限制。 比如&#xff1a; 商品ID为参数&#xff0c;统计一段时间内最常购买的商品ID并进行限制用户ID为参数&#xff0c;针对一段时间内频繁…

【linux】init进程的详解

文章目录 概述init进程完成从内核态向用户态的转变&#xff08;1&#xff09;一个进程先后两种状态&#xff08;2&#xff09;init进程在内核态下的工作内容&#xff08;3&#xff09;init进程在用户态下的工作内容&#xff08;4&#xff09;init进程如何从内核态跳跃到用户态 …

springboot+vue高校社团管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的高校社团管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

Linux快速安装Erlang和RabbitMQ单机版

环境 CentOS7Xshell6XFtp6Erlang 21.3RabbitMQ 3.8.4 安装方式 同一个软件有很多种安装方式&#xff0c;在Linux系统有几种常见的软件安装方式&#xff1a; 源码编译安装&#xff1a;一般需要解压&#xff0c;然后使用make、make install等命令RPM&#xff08;RedHat Packa…

从物业管理到IT互联网精英,月薪11k的她几经辗转,终得偿所愿!

所谓“男怕入错行”&#xff0c;其实对女生来说也是一样&#xff0c;不同行业对人生的改变太大&#xff0c;想要找到满意的工作&#xff0c;就要不断去尝试。 西安的学员小文&#xff0c;大学毕业后从事的本专业&#xff08;物业管理&#xff09;工作&#xff0c;但不是很喜欢…

条款1:理解模板类型推导

现代C中被广泛应用的auto是建立在模板类型推导的基础上的。而当模板类型推导规则应用于auto环境时&#xff0c;有时不如应用于模板中那么直观。由于这个原因&#xff0c;真正理解auto基于的模板类型推导的方方面面非常重要。 在c中声明一个模板函数的伪代码基本如下&#xff1…