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.

octomap1

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.

octomap2

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.

octomap3

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