Turtlebot Robot İle Gazebo ve Rviz Ortamında Octomap Haritalama (Turtlebot Octomap 3D Mapping)
Github Link
Ros için octomap kurulumunu yapalım.
sudo apt-get install ros-kinetic-octomap-server ros-kinetic-turtlebot ros-kinetic-turtlebot-teleop ros-kinetic-turtlebot-description ros-kinetic-turtlebot-navigation ros-kinetic-turtlebot-rviz-launchers ros-kinetic-turtlebot-simulator ros-kinetic-turtlebot-simulator
simülasyon paketini açalım
roslaunch turtlebot_gazebo turtlebot_world.launch
rvizde görselleştirme için
roslaunch turtlebot_rviz_launchers view_robot.launch
robot hareketi sağlamak için
roslaunch turtlebot_teleop keyboard_teleop.launch
octomap_turtlebot.launch adında bir dosya oluşturup şunu yapıştıralım
<launch> <node pkg="octomap_server" type="octomap_server_node" name="octomap_server"> <param name="resolution" value="0.05" /> <param name="frame_id" type="string" value="odom" /> <!-- maximum range to integrate (speedup!) --> <param name="sensor_model/max_range" value="5.0" /> <!-- data source to integrate (PointCloud2) --> <remap from="cloud_in" to="/camera/depth/points" /> </node> </launch>
Parametrelerden biraz bahsedelim:
resolution : Octree nin çözünürlüğü ne kadar düşükse okadar ayrıntıı point cloud üretilir.
frame_id : Simülasyon ortamının görünüş biçimi.
cloud_in : Point cloud’un yayın yapılacağı topic.
Dosyayı kaydettiğimiz dizine giderek şunu çalıştıralım.
roslaunch octomap_turtlebot.launch
Bu siteyi takip ederek yaptığım tutorialda aşağıdaki görüntü oluşmaktadır.
Ancak ben çalıştırdığım zaman noktalar tarandıktan sonra görünmüyor.Aşağıdaki gibi bir görüntü oluşuyor.
Bu sorunu birçok yerde araştırmama rağmen bir çözüm bulamadım ve Rviz ile uğraşırken sorunu şöyle çözdüm. Rviz içerisinden topiklere göre /occupied_cells_vis_array topiği ile marker_arrays ekleyerek halettim.
Octomap ile octree tabanlı 3d görüntümüz bu şekilde rviz üzerinde görülebilir eğer bu vokselleri(piksel in 3 boyutlu formu) point cloud data olarrak kaydetmek istersek aşağıdaki işlemleri yapabiliriz.
- Öncelikle topicten gelen mesajları rosbag olarak kaydetmemiz gerekir bunun için ros çalışırken aşağıdaki komutu kullanabiliriz.
rosbag record -O <kayıt yolu> <topic>
örneğin:
rosbag record -O /home/s/Masaüstü/deneme /camera/depth/points
- kaydedilen bu rosbag dosyasını .pcd dosyasına dönüştürmek için:
dönüşüm işleminde ros kullanıldığı için eğer çalışan bir ros uygulamanız yoksa rosu çalıştırmanız gerekir
roscore
rosrun pcl_ros bag_to_pcd <bag dosyasının yolu> <topic> <.pcd doyasının yolu>
örneğin:
rosrun pcl_ros bag_to_pcd /home/s/Masaüstü/deneme.bag /camera/depth/points /home/s/Masaüstü/deneme
veya rosbag dosyasını hiç oluşturmadan tobotumuz çalışır durumda iken aşağıdaki komut ile topicten alınan mesajlar direk olarak .pcd dosyası olarak kaydedilebilir. Ayrıntılı bilgi için şu linke bakabilirsiniz. http://wiki.ros.org/pcl_ros
rosrun pcl_ros pointcloud_to_pcd input:=<topic> _prefix:=<çıktı dosya yolu>
örneğin:
rosrun pcl_ros pointcloud_to_pcd input:=/camera/depth/points _prefix:=/home/s/Masaüstü/deneme/veriler