ROS機械臂 Movelt 學習筆記3 | kinect360相機(v1)相關設定

2022-07-25 06:01:10

目標是做一個機械臂視覺抓取的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