Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Kızılötesi
Description: Evarobot üzerindeki kızılötesi sensörlerin kullanımıTutorial Level: BEGINNER
Next Tutorial: Sonar
Kızılötesini Çalıştırma
Evarobot üzerindeki kızılötesi sensörleri çalıştırmadan önce Evarobot'a ssh ile bağlanılır.
# evarobot > ssh pi@evarobotDSK > sudo -s
Kızılötesi sensörlerini çalıştırmak için aşağıdaki kodu terminalde çalıştırmak yeterli olacaktır. evarobot_infrared isimli launch dosyası kızılötesi sensörleri çalıştırmaktadır. Launch dosyasının aldığı parametreler hakkında bilgi almak için evarobot_infrared sayfasını kullanabilirsiniz.
# evarobot > roslaunch evarobot_infrared evarobot_infrared.launch
Bilgisayar ile Evarobot'un konuşabilmesi için multimaster_fkie paketinde keşif ve senkronizasyon için kullanılan iki düğümü çalıştırmamız gerekmektedir.
# evarobot > roslaunch master_discovery_fkie master_discovery.launch
# evarobot > roslaunch master_sync_fkie master_sync.launch
Kızılötesi Sensörlerini Terminalden Okuma
Bilgisayar tarafında terminalden kızılötesi sensörlerini okumak için senkronizasyon düğümlerini çalıştırmak gerekmektedir.
# pc > roslaunch master_discovery_fkie master_discovery.launch
# pc > roslaunch master_sync_fkie master_sync.launch
Başka bir terminalde rostopic komutu ile kızılötesi verisi okunabilir. Varsayılan ayarlarda kullanılan topik ismi /sensor/ir<n> şeklindedir. n senörün numarasını belirtmektedir. 3 tane sensör kullanığı örneği üzerinden bakarsak /sensor/ir0, /sensor/ir1, /sensor/ir2 isimli topiklerden veriler okunabilecektir. Örnek olarak 0 nolu sensörün verisini okumak için aşağıdaki kodu kullanıbiliriz.
# pc > rostopic echo /sensor/ir0
Topik hakkında bilgi almak için ise aşağıdaki kod kullanılır.
# pc > rostopic info /sensor/ir0
Kızılötesi Sensör için Basit Subscriber Yazma
Catkin çalışma alanında evarobot_infrared_subs adında paket oluşturulur.
> cd ~/catkin_ws/src > catkin_create_pkg evarobot_infrared_subs sensor_msgs rospy roscpp
Oluşturulan paketin içerinde /src klasörü altında infrared_listener.cpp isminde c++ dosyası oluşturulur. Örnek kapsamında kızılötesi sensörlerden sadece 0 nolu sensörün okuması yapılacaktır.
> cd ~/catkin_ws/src/evarobot_infrared_subs > mkdir -p ~/catkin_ws/src/evarobot_infrared_subs/src > cd src > gedit infrared_listener.cpp
infrared_listener.cpp dosyasının içerisine yazılacak kod aşağıda verilmektedir.
1 #include "ros/ros.h"
2 #include "sensor_msgs/Range.h"
3
4 /**
5 * Bu örnekte evarobot üzerindeki kızılötesi sensörleri ROS sistemi üzerinden okuyan basit bir subscriber yapılmaktadır.
6 */
7
8 /**
9 * Dinlenen topikten veri geldiğinde çalışacak callback fonksiyonudur.
10 * Bu örnekte, görevi gelen mesafe verileri ekrana yazdırmakdır.
11 */
12 void chatterCallback(const sensor_msgs::Range::ConstPtr& msg)
13 {
14 ROS_INFO("Infrared Seq: [%d]", msg->header.seq);
15 ROS_INFO("Infrared Range: [%f]", msg->range);
16 }
17
18 int main(int argc, char **argv)
19 {
20 /**
21 * ROS ilklendiriliyor.
22 */
23 ros::init(argc, argv, "infrared_listener");
24
25 ros::NodeHandle n;
26
27 /**
28 * Subscriber tanımlanıyor.
29 * İlk parametre olarak dinlenecek topiğin adı, ardından bufferın büyüklüğü ve callback fonksiyonu tanımlanmaktadır.
30 */
31 ros::Subscriber sub = n.subscribe("sensor/ir0", 1000, chatterCallback);
32
33 ros::spin();
34
35 return 0;
36 }
Paket derlenirken yazdığımız cpp dosyasını derlemesi için CMakeLists.txt dosyasını aşağıdaki gibi düzenliyoruz.
> cd .. > gedit CMakeLists.txt
cmake_minimum_required(VERSION 2.8.3) project(evarobot_infrared_subs) find_package(catkin REQUIRED COMPONENTS sensor_msgs roscpp rospy ) catkin_package() include_directories( ${catkin_INCLUDE_DIRS} ) add_executable(infrared_listener src/infrared_listener.cpp) add_dependencies(infrared_listener sensor_msgs_generate_messages_cpp) target_link_libraries(infrared_listener ${catkin_LIBRARIES} )
Yazdığımız ROS paketini derliyoruz.
> cd ~/catkin_ws/ > catkin_make
Yazdığımız infrared_listener düğümünü aşağıdaki gibi çalıştırıldığında, okunan verilerin ekrana yazılması beklenmektedir.
> rosrun evarobot_infrared_subs infrared_listener
Kızılötesi Sensör Verisini Görselleştirme
> rosrun rviz rviz