目標是做一個機械臂視覺抓取的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,
-
在rviz中將Global Option中的Fixed Frame后面選擇camera_link
-
點擊Add在By topic中選擇想錄制的話題,點擊OK即可,
這里我選擇的是
/rgb/image_color,即彩色圖, -
設定完后,就可在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:
- RGB影像:
/camera/rgb/image_color- ROS資料格式:sensor_msgs/Image
- OPENCV資料格式:Mat
- 影像尺寸:640*480
- 像素資料型別:8UC3
- 深度影像:
/camera/depth/image- ROS資料格式:sensor_msgs/Image
- OPENCV資料格式:Mat
- 影像尺寸:640*480
- 像素資料型別:32FC1
- 點云資料(無整合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 中左側進行如下設定:
- Global Options中,將Fixed Frame 改為 camera_rgb_optical_frame
- 左下角點擊 Add,將 PoitCloud2 加進來
- 在 PointCloud2 的 Topic 中選擇
/camera/depth_registered/points
即可看到點云影像:

查看話題的資料流:
rostopic echo /camera/depth/points
7. Kinect 相機相關介紹
7.1 相機構成
可見自左向右依次為:
- 麥克風陣列
- 紅外CMOS攝像機(左1)
- LED
- 彩色攝像頭
- 紅外攝像頭(右1)
- 下方是傳動馬達

7.2 深度資訊獲得原理
以結構光為基礎進行改進后的光編碼(Light Coding)技識訓得物體的深度資訊,各相機坐標系如下:

參考資料:
- 官方相關檔案:http://wiki.ros.org/freenect_camera
- https://blog.csdn.net/qq_63379469/article/details/123834391
- https://blog.csdn.net/a_happy_bird/article/details/125378527
- 一個系列博客:https://blog.csdn.net/puqian13/article/list/4
- https://www.it610.com/article/1295398327008960512.htm
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500197.html
標籤:其他
