奥比中光Orbbec Astra pro 深度相机在ROS Melodic的使用

一、虚拟机中使用OPENNI显示相机图像

下载openni的linux安装包。下载地址

https://dl.orbbec3d.com/dist/openni2/OpenNI_2.3.0.66.zip

将文件夹中的该文件拷贝到虚拟机中 

首先安装依赖包

sudo apt-get install build-essential freeglut3 freeglut3-dev

然后解压压缩包,并进入解压后的压缩包

unzip OpenNI-Linux-x64-2.3.0.66.zip

解压后执行以下语句

chmod 777 install.sh
sudo ./install.sh

重新拔插设备 初始化OpenNI环境

source OpenNIDevEnvironment

编译运行

cd Samples/SimpleViewer
make
cd Bin/x64-Release
./SimpleViewer

二,在ROS环境中使用Orbbec Astra

1)安装依赖包

sudo apt install ros-$ROS_DISTRO-rgbd-launch ros-$ROS_DISTRO-libuvc ros-$ROS_DISTRO-libuvc-camera ros-$ROS_DISTRO-libuvc-ros

2)将ros_astra_camera包,放在已经创建好的ros工作区间的SRC文件夹下:

使用命令的方法

cd ~/catkin_ws/src
git clone https://github.com/orbbec/ros_astra_camera

执行该句,很难下载到装包,使用以下链接,直接在windows下环境下,下载好,拷贝到工作空间

mirrors / orbbec / ros_astra_camera · GitCodeROS wrapper for Astra camera 🚀 Github 镜像仓库 🚀 源项目地址 ⬇https://gitcode.net/mirrors/orbbec/ros_astra_camera?utm_source=csdn_github_accelerator

  3)在工作区下进行编译astra_camera

cd ~/catkin_ws
catkin_make --pkg astra_camera

编译成功的结果为:

 

 4)创建 astra udev 规则

roscd astra_camera
./scripts/create_udev_rules

 5)运行astra_camera

注意:搞清楚自己相机的型号,是否是pro版本的

roslaunch astra_camera astrapro.launch

如果上面的编译没有什么问题,执行上面一句话后,结果如图所示: 

如果想看相机的ros包中,具备的话题有哪些,可以使用以下命令查看

其实,这里面我们最感兴趣的只有三个:深度图像、彩色图像、红外图像
/camera/depth/image_raw是深度图像
/camera/depth_registered/image_raw是和彩色图像配准之后的深度图像
/camera/ir/image_raw是红外图像
/camera/rgb/image_raw是彩色图像
 

 6)使用rviz显示相机

在终端输入:rviz

 随后在左侧打开选项卡image,在image Topic中选择自己订阅的节点即可。

三,测试相机自带的所有例程 

1.彩色相机标定

第一个终端启动命令
roslaunch astra_camera astrapro.launch

重启一个终端输入命令
# 彩色图
rosrun camera_calibration cameracalibrator.py image:=/camera/rgb/image_raw camera:=/camera/rgb --size 9x6 --square 0.02

标定的结果到什么程度算是合格,最好的情况是【X】、【Y】、【Size】、【Skew】下面的线条变为绿色后就成功了;

当认为当前标定图像的数目已经够了,(六七十张就差不多了,太多容易卡死),点击【CALIBRATE】计算相机内参。

计算完内参后,进行保存

标定结束后,标定结果存在【/tmp/calibrationdata.tar.gz】,可以移动出来看看内容

sudo mv /tmp/calibrationdata.tar.gz ~
解压后,里面有刚刚标定的图片,一个ost.txt文件和一个ost.yaml文件。yaml文件是我们需要的,不过还需要修改才可以使用。
  • 将ost.yaml改为head_camera.yaml
  • 将camera_name:后面的名称改为head_camera
  • 将文件移动到~/.ros/camera_info文件夹下【这个文件夹是针对小车下的文件夹的。虚拟机只是用来做标定获得该文件夹即可】

  • 7
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
你可以使用以下示例代码来开始使用奥比中光OrbbecAstra深度摄像头: ```cpp #include <astra/astra.hpp> #include <iostream> class SampleFrameListener : public astra::FrameListener { public: void on_frame_ready(astra::StreamReader& reader, astra::Frame& frame) override { const astra::DepthFrame depthFrame = frame.get<astra::DepthFrame>(); if (!depthFrame.is_valid()) { std::cout << "Invalid depth frame!" << std::endl; return; } const int width = depthFrame.width(); const int height = depthFrame.height(); const int frameIndex = depthFrame.frame_index(); std::cout << "Depth frame " << frameIndex << " ready: " << width << "x" << height << std::endl; const astra::Vector3f* depthData = depthFrame.data(); const int numPixels = width * height; for (int i = 0; i < numPixels; ++i) { const float depth = depthData[i].z; // 处理深度数据,例如将其可视化或进行其他计算 } } }; int main(int argc, char** argv) { astra::initialize(); astra::StreamSet streamSet; astra::StreamReader reader = streamSet.create_reader(); SampleFrameListener listener; reader.stream<astra::DepthStream>().start(); reader.add_listener(listener); while (true) { astra_update(); // 执行其他任务,或者在这里添加退出循环的条件 } astra::terminate(); return 0; } ``` 这个示例代码演示了如何使用Astra SDK来读取并处理深度帧数据。你可以在`on_frame_ready`函数中处理深度数据,例如将其可视化或进行其他计算。 请确保已经正确安装Astra SDK,并将其相关库文件和头文件链接到你的项目中。此外,你还需要为你的程序提供适当的权限来访问Astra摄像头设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值