目標是做一個機械臂視覺抓取的demo,在基地裡翻箱倒櫃,沒有找到學長所說的 d435,倒是找到了一個老古董 kinect 360。
前幾天就已經在舊電腦上設定好了,現在記錄在新電腦上的設定過程。
環境: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 資料夾,其下有:
這三個包的版本是相互匹配的,注意ubuntu下不能使用openni2.2和NITE2.2版本的包,接下來按照目錄下的 README 來做就可以,沒什麼問題。
記得連上 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
sudo apt-get install ros-melodic-freenect-*
rospack profile
安裝rqt-image-view顯示影象
sudo apt-get install ros-melodic-rqt-image-view
繼續找到資料夾:
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
官方提供了執行 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中左上角選擇不同的話題,就可以檢視不同的影象,也可以檢視深度圖。
可以檢視一下當前活躍的話題:
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
先在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
上面的 rostopic list
命令的一些解釋:
rostopic list
rostopic list 列出了當前活躍的ROS節點,相關topic:
/camera/rgb/image_color
/camera/depth/image
/camera/depth/points
下表為 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 | 設定紅外相機的校準資訊 |
開啟相機節點:
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 中左側進行如下設定:
/camera/depth_registered/points
即可看到點雲影象:
檢視話題的資料流:
rostopic echo /camera/depth/points
可見自左向右依次為:
以結構光為基礎進行改進後的光編碼(Light Coding)技術獲得物體的深度資訊。各相機座標系如下:
參考資料: