目标是做一个机械臂视觉抓取的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. ROS机械臂 Movelt 学习笔记1 | 基础准备

    环境:Ubuntu18.04 + ROS Melodic 1. 安装ROS 官网下载安装步骤:http://wiki.ros.org/melodic/Installation/Ubuntu 一键安装的 ...

  2. ROS机械臂 Movelt 学习笔记2 | Move Group 接口 C++

    Movelt为使用者提供了一个最通用且简单的接口 MoveGroupInterface 类,这个接口提供了很多控制机器人的常用基本操作,如: 设置机械臂的位姿 进行运动规划 移动机器人本体 将物品添加 ...

  3. ROS机械臂 Movelt 学习笔记4 | Move Group 接口 Python

    Python 的使用总是比 C++ 简单许多,Move Group 的 Python 接口更为便捷,也为使用者提供了很多用于操纵机器人和机械臂的函数,能够和 C++ 接口实现相同的功能: 设置机械臂的 ...

  4. ROS机械臂 Movelt 学习笔记5 | MoveIt Commander Scripting

    前一讲python接口中提到moveit_commander 包.这个包提供了用于运动规划.笛卡尔路径计算以及拾取和放置的接口. moveit_commander 包还包括一个命令行接口程序movei ...

  5. Android学习笔记(一)Git相关配置及使用

    一.配置 打开Git Bash, git config --global user.name "username" git config --global user.email & ...

  6. Spring学习笔记(二)——Spring相关配置&属性注入&Junit整合

    一.Spring的相关配置 1.1 Bean元素 class属性:被管理对象的完整类名 name属性:给Bean起个名字,能重复,能使用特殊字符.后来属性 id属性:给Bean起个名字,不能重复,不能 ...

  7. Redis学习笔记(二)-key相关命令【转载】

    转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...

  8. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

  9. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...

随机推荐

  1. 史上最全Linux面试题(2020最新版)

    作者:ThinkWon 链接:https://blog.csdn.net/thinkwon/article/details/104588679 导读:本文整理了最新的Linux面试题,近3万字,约10 ...

  2. CentOS7安装部署Mongodb

    1.下载安装包 打开官网,跳转至下载界面,选择对应版本的安装包,拷贝其链接,这里是手动安装,所以下载tgz安装包,如果要自动化安装,选择server的rpm自动安装包 https://www.mong ...

  3. 如何形象简单地理解java中只有值传递,而没有引用传递?

    首先,java中只有值传递,没有引用传递.可以说是"传递的引用(地址)",而不能说是"按引用传递". 按值传递意味着当将一个参数传递给一个函数时,函数接收的是原 ...

  4. .NET混合开发解决方案14 WebView2的基本身份验证

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  5. 三个小项目入门Go语言|字节青训营笔记

    前言 这是青训营的第一课,今天的课程比较快速的讲解了go语言的入门,并配合三个小的项目实践梳理所学知识点,这里详细回顾一下这三个项目,结合课后作业要求做一些代码补充,并附上自己的分析,青训期间的所有课 ...

  6. 804. Unique Morse Code Words - LeetCode

    Question 804. Unique Morse Code Words [".-","-...","-.-.","-..&qu ...

  7. 数仓选型必列入考虑的OLAP列式数据库ClickHouse(上)

    概述 定义 ClickHouse官网地址 https://clickhouse.com/ 最新版本22.4.5.9 ClickHouse官网文档地址 https://clickhouse.com/do ...

  8. Redis快速度特性及为什么支持多线程及应用场景

    转载请注明出处: 目录 1.Redis 访问速度快特性 2.Redis 6.0 为什么支持多线程? 3.Redis可以做什么 3.1.缓存 3.2.排行榜系统 3.3.计数器应用 3.4.社交网络 3 ...

  9. [算法学习] dsu on tree

    简介 dsu on tree跟dsu没有关系,但是dsu on tree借鉴了dsu的启发式合并的思想. 它是用来解决一类树上的询问问题,一般这种问题有以下特征: \(1.\)只有对子树的查询: \( ...

  10. 给小白的 PostgreSQL 容器化部署教程(上)

    作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿.从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上.文章分为上下两部分,第一部分 ...