PCLを使ってみたかったので、とりあえずROSというミドルウェアから
試してみる。
以下、チュートリアルやネットにあるサンプルを試してみたときのログ。
環境構築
環境
Ubuntu18.04
ROS Melodic
kinect for windows
Instlation
melodic/Installation/Ubuntu - ROS Wiki
ROSインストール
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' $ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 $ sudo apt update $ sudo apt install ros-melodic-desktop-full $ sudo rosdep init $ rosdep update $ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc $ source ~/.bashrc
libfreenectインストール
$ wget https://github.com/ros-drivers/libfreenect/archive/ros-devel.zip $ unzip ros-devel.zip $ cd libfreenect-ros-devel $ mkdir build $ cd build $ cmake -L .. $ make $ sudo make install #$ cd ../platform/linux/udev/ #$ sudo cp 51-kinect.rules /etc/udev/rules.d #$ sudo udevadm trigger
rbgd_launchとfreenect_stackをインストール
$ cd ~ $ mkdir -p ~/catkin_ws/src $ cd catkin_ws/src $ git clone https://github.com/ros-drivers/rgbd_launch $ git clone https://github.com/ros-drivers/freenect_stack.git $ cd .. $ catkin_make $ source devel/setup.bash
実行
別端末でtopicをpublishする。
$ source ~/catkin_ws/devel/setup.bash $ roslaunch freenect_launch freenect.launch
可視化する
rqt_image_viewで可視化する場合
$ source ~/catkin_ws/devel/setup.bash $ rosrun rqt_image_view rqt_image_view
rvizで可視化する場合
$rosrun rviz rviz
1.左上のFixed Frameをcamera_depth_frameにする。
2.左下のAddボタンからPointCloud2を選択する。
3.PointCloud2->Topicを/camera/depth_registered/pointsにする。
4.PointCloud2->StyleをPointsにする。
チュートリアルを試す(catkin編)
http://wiki.ros.org/pcl/Tutorials#pcl.2BAC8-Tutorials.2BAC8-hydro.pcl.2BAC8-PointCloud.3CT.3E
公式にはcatkinとrosbuildの両方あるがcatkinが後発らしい。
ROSパッケージを作成する
$ cd ~/catkin_ws/src $ catkin_create_pkg my_pcl_tutorial pcl_conversions pcl_ros roscpp sensor_msgs
package.xmlに下記を追加する($ gedit my_pcl_tutorial/package.xml )
<build_depend>libpcl-all-dev</build_depend> <exec_depend>libpcl-all</exec_depend>
example.cppを作成する(公式チュートリアル2番目)
$ gedit my_pcl_tutorial/src/example.cpp
CMakeLists.txtに下記を追加する($ gedit my_pcl_tutorial/CMakeLists.txt )
add_executable(example src/example.cpp) target_link_libraries(example ${catkin_LIBRARIES})
ビルドする
$ ~/catkin_ws $ catkin_make
別端末でマスターを実行しておく
$ roslaunch freenect_launch freenect.launch
my_pcl_tutorialを実行する
rosrun my_pcl_tutorial example input:=/narrow_stereo_textured/points2
さらに別端末からrvizを実行する
$ rosrun rviz rviz
その他の例
https://staff.aist.go.jp/kanezaki.asako/pdf/SSII2016_AsakoKanezaki.pdf
$ cd ~/catkin_ws/src $ catkin_create_pkg save_pcd pcl_ros cv_bridge roscpp sensor_msgs
package.xmlに下記を追加する($ gedit save_pcd/package.xml )
<build_depend>opencv2</build_depend> <exec_depend>opencv2</exec_depend>
CMakeLists.txtに下記を追加する($ gedit save_pcd/CMakeLists.txt )
add_executable(save_pcd src/save_pcd.cpp) find_package(OpenCV REQUIRED) include_directories(/usr/local/include ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS}) target_link_libraries(dfollow ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
save_pcd.cppを作成する(https://github.com/kanezaki/ssii2016_tutorial/blob/master/save_pcd.cpp)
$ gedit save_pcd/src/save_pcd.cpp
ビルドする
$ ~/catkin_ws $ catkin_make ※1
別端末でマスターを実行しておく
$ roslaunch freenect_launch freenect.launch
my_pcl_tutorialを実行する
$ rosrun save_pcd save_pcd
pcdが保存されていく。Ctrl+cで止める。
pclviewerで保存された0.pcdを表示する。
$ sudo apt install pcl-tools $ pcl_viewer 0.pcd