jjzjj

ROS机械臂 Movelt 学习笔记3 | kinect360相机(v1)相关配置

Clivia Du 2023-03-28 原文

目标是做一个机械臂视觉抓取的demo,在基地里翻箱倒柜,没有找到学长所说的 d435,倒是找到了一个老古董 kinect 360。

前几天就已经在旧电脑上配置好了,现在记录在新电脑上的配置过程。

1. kinect 相机驱动安装

环境:Ubuntu 18.04 + ROS Melodic

需要安装3个驱动包,并且彼此版本需要适配,安装过程如下:

在原作者的 Github 上下载:

https://github.com/ZXWBOT/kinect_driver

cd ~ARM/kinect_arm
git clone https://github.com/ZXWBOT/kinect_driver.git

也可以在网盘下载:

http://pan.baidu.com/s/1hqHB10w 提取密码:wrmn

下载完成后安装依赖:

sudo apt-get install g++ python libusb-1.0-0-dev freeglut3-dev openjdk-8-jdk doxygen graphviz mono-complete 

可以看到我们的 kinect_arm 文件夹下有一个 kinect_driver 文件夹,其下有:

  • OpenNI-Bin-Dev-Linux-x64-v1.5.7.10
  • NITE-Bin-Linux-x64-v1.5.2.23
  • Sensor-Bin-Linux-x64-v5.1.2.1

这三个包的版本是相互匹配的,注意ubuntu下不能使用openni2.2和NITE2.2版本的包,接下来按照目录下的 README 来做就可以,没什么问题。

2. 测试 kinect

记得连上 kinect 的数据线,看到 kinect 亮起绿灯,然后:

cd ~/...../OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release

./NiViewer 

出现相机画面则配置成功。

如果报错,尝试修改权限:

sudo chmod +x /usr/bin/XnSensorServer

再运行即可。

左侧为深度图,右侧为彩色图,画面如下:

https://osrf-distributions.s3.amazonaws.com/gazebo/api/dev/classgazebo_1_1phisics_1_1World.html

3. ROS 打开相机

3.1 安装依赖

sudo apt-get install ros-melodic-freenect-*  
rospack profile  

安装rqt-image-view显示图像

sudo apt-get install ros-melodic-rqt-image-view

3.2 安装 libfreenect 库

继续找到文件夹:

cd ~ARM/kinect_arm
git clone https://github.com/ros-drivers/libfreenect.git
cd libfreenect
mkdir build
cd build
cmake -L ..
make
sudo make install

3.3 ros下的 freenect_stack 包

官方提供了运行 kinect 相机的ROS样例包 freenect_stack,下面我们把这个包跑起来:

cd ~/ARM/kinect_arm
mkdir -p ws_kinect/src
cd ws_kinect/src
git clone https://github.com/ros-drivers/freenect_stack.git
# 如果还没有设置ROS空间
# catkin_init_workspace
cd ..
catkin_make 
rospack profile

编译无误则:

# 在 ~/ARM/kinect_arm/ws_kinect下
source devel/setup.bash
roslaunch freenect_launch freenect.launch

新开一个终端:

rosrun rqt_image_view rqt_image_view 

在rqt_image_view中左上角选择不同的话题,就可以查看不同的图像,也可以查看深度图。

4. 录制 bag 并回放

4.1 命令行录制

可以查看一下当前活跃的话题:

rostopic list

对于其中一个话题进行录制:

# 录制语法
# 比如:rosbag record /topic1 -o out.bag
rosbag record /camera/rgb/image_color -o  camera.bag
# 显示录制内容(bag包中的信息)
# rosbag info filename.bag
rosbag info camera_2022-07-23-21-23-45.bag

# 回放录制内容
# rosbag play <bagfile_name>
rosbag play camera_2022-07-23-21-23-45.bag

4.2 RViz 录制

先在RViz 中显示我们向看到的图像,这也是学长们比赛时向国防临时学的技巧。

cd ~/ARM/kinect_arm/ws_kinect
source devel/setup.bash
roslaunch freenect_launch freenect.launch

新开终端2:

rosrun rqt_image_view rqt_image_view 

再开终端3:

rostopic list

终端4 打开rviz

rosrun rviz rviz

默认的rviz 应当是空无一物,下面来设置 rviz。

  1. 在rviz中将Global Option中的Fixed Frame后面选择camera_link

  2. 点击AddBy topic中选择想录制的话题,点击OK即可。

    这里我选择的是 /rgb/image_color,即彩色图。

  3. 设置完后,就可在rviz中实时查看想要录制的话题。

下面录制:

# 格式:rosrun topic_tools throttle messages <intopic> <msgs_per_sec> [outtopic]

# 例如,如果我想要让激光雷达的topic发布频率降低至1HZ,则在终端中输入如下命令:
rosrun topic_tools throttle messages base_scan 1.0

举实例说明,比如 /camera/rgb/image_color/camera/rgb/image_raw两个话题修改为 4HZ,则:

// 同时录制,只开一个终端
rosbag record /my_image_color  /my_image_raw -o my_image.bag 
//分开录制,开两个终端
rosbag record /my_image_color -o my_image_color.bag
rosbag record /my_image_raw   -o my_image_raw .bag

5. 常用话题解释

上面的 rostopic list 命令的一些解释:

rostopic list

rostopic list 列出了当前活跃的ROS节点,相关topic:

  1. RGB图像:/camera/rgb/image_color
    • ROS数据格式:sensor_msgs/Image
    • OPENCV数据格式:Mat
    • 图像尺寸:640*480
    • 像素数据类型:8UC3
  2. 深度图像:/camera/depth/image
    • ROS数据格式:sensor_msgs/Image
    • OPENCV数据格式:Mat
    • 图像尺寸:640*480
    • 像素数据类型:32FC1
  3. 点云数据(无整合RGB):/camera/depth/points
    • ROS数据格式:sensor_msgs/Image
    • PCL点云库数据格式:pcl::PointCloudpcl::PointXYZ
    • 图像尺寸:有序点云,640*480
    • 像素数据类型:double

下表为 freenect_camera 功能包的话题和服务情况:

来源:ros官网:http://wiki.ros.org/freenect_camera,日后可能会有更新。

话题情况 名称 消息类型 描述
Topic发布 rgb/camera_info sensor_msgs/CameraInfo RGB相机校准信息
Topic发布 rgb/image_raw sensor_msgs/Image RGB相机图像数据
Topic发布 depth/camera_info sensor_msgs/CameraInfo 深度相机校准信息
Topic发布 depth/image_raw sensor_msgs/Image 深度相机图像数据
Topic发布 depth_registered/camera_info sensor_msgs/CameraInfo 配准后的深度相机校准信息
Topic发布 depth_registered/image_raw sensor_msgs/Image 配准后的深度相机图像数据
Topic发布 ir/camera_info sensor_msgs/CameraInfo 红外相机校准信息
Topic发布 ir/image_raw sensor_msgs/Image 红外相机图像数据
Topic发布 projector/camera_info sensor_msgs/CameraInfo 红外相机的假校准
Topic发布 /diagnostics diagnostic_msgs/DiagnosticArray 传感器诊断信息
Servicecs rgb/set_camera_info sensor_msgs/SetCameraInfo 设置RGB相机的校准信息
Servicecs ir/set_camera_info sensor_msgs/SetCameraInfo 设置红外相机的校准信息

6. 在RViz 中显示点云

打开相机节点:

cd ~/ARM/kinect_arm/ws_kinect
source devel/setup.bash
roslaunch freenect_launch freenect.launch

新开终端:

rosrun rqt_image_view rqt_image_view 

再开终端:

rostopic list

再开:

rosrun rviz rviz

打开了跟 4.2 相同的界面,在RViz 中左侧进行如下设置:

  1. Global Options中,将Fixed Frame 改为 camera_rgb_optical_frame
  2. 左下角点击 Add,将 PoitCloud2 加进来
  3. 在 PointCloud2 的 Topic 中选择 /camera/depth_registered/points

即可看到点云图像:

查看话题的数据流:

 rostopic echo /camera/depth/points

7. Kinect 相机相关介绍

7.1 相机构成

可见自左向右依次为:

  • 麦克风阵列
  • 红外CMOS摄像机(左1)
  • LED
  • 彩色摄像头
  • 红外摄像头(右1)
  • 下方是传动马达

7.2 深度信息获得原理

结构光为基础进行改进后的光编码(Light Coding)技术获得物体的深度信息。各相机坐标系如下:

参考资料:

  1. 官方相关文档:http://wiki.ros.org/freenect_camera
  2. https://blog.csdn.net/qq_63379469/article/details/123834391
  3. https://blog.csdn.net/a_happy_bird/article/details/125378527
  4. 一个系列博客:https://blog.csdn.net/puqian13/article/list/4
  5. https://www.it610.com/article/1295398327008960512.htm

有关ROS机械臂 Movelt 学习笔记3 | kinect360相机(v1)相关配置的更多相关文章

  1. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  6. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  7. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

  8. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  9. 机器学习——时间序列ARIMA模型(四):自相关函数ACF和偏自相关函数PACF用于判断ARIMA模型中p、q参数取值 - 2

    文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk​=Var(yt​)Cov(yt​,yt−k​)​其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞

  10. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

随机推荐