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. |
Bumper
Description: Evarobot üzerindeki bumper sensörleri kullanmaTutorial Level: BEGINNER
Next Tutorial: Kızılötesi
Bumper'ı Çalıştırma
Evarobot içerisindeki sürücüler sayesinde robot üzerindeki bumper sensörleri okunabilmektedir. Sensörlerin okuma bilgisi, çarpışma var ya da yok şeklinde bir değere sahiptir. Evarobot üzerindeki bumper'ı çalıştırmadan önce Evarobot'a ssh ile bağlanılır.
# evarobot > ssh pi@evarobotDSK > sudo -s
Bumper sensörlerini çalıştırmak için aşağıdaki kodu terminalde çalıştırmak yeterli olacaktır. evarobot_bumper isimli launch dosyası bumper sensörleri çalıştırmaktadır. Launch dosyasının aldığı parametreler hakkında bilgi almak için evarobot_bumper sayfasını kullanabilirsiniz.
# evarobot > roslaunch evarobot_bumper evarobot_bumper.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
Bumper'ı Terminalden Okuma
Bilgisayar tarafında terminalden bumper 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 bumper verisi okunabilir.
# pc > rostopic echo /bumper
Topik hakkında bilgi almak için ise aşağıdaki kod kullanılır.
# pc > rostopic info /bumper
Bumper için Basit Subscriber Yazma
Catkin çalışma alanında evarobot_bumper_subs adında paket oluşturulur.
> cd ~/catkin_ws/src > catkin_create_pkg evarobot_bumper_subs im_msgs rospy roscpp
Oluşturulan paketin içerinde /src klasörü altında bumper_listener.cpp isminde c++ dosyası oluşturulur.
> cd ~/catkin_ws/src/evarobot_bumper_subs > mkdir -p ~/catkin_ws/src/evarobot_bumper_subs/src > cd src > gedit bumper_listener.cpp
bumper_listener.cpp dosyasının içerisine yazılacak kod aşağıda verilmektedir.
1 #include "ros/ros.h"
2 #include "im_msgs/Bumper.h"
3
4 /**
5 * Bu örnekte evarobot üzerindeki bumper 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 verileri ekrana yazdırmakdır.
11 */
12 void chatterCallback(const im_msgs::Bumper::ConstPtr& msg)
13 {
14 ROS_INFO("New Data: %d", msg->header.seq);
15 for(int i = 0; i < msg->state.size(); i++)
16 {
17 if(msg->state[i].bumper_state)
18 ROS_INFO("Bumper[%d] True", i);
19 else
20 ROS_INFO("Bumper[%d] False", i);
21 }
22 }
23
24 int main(int argc, char **argv)
25 {
26 /**
27 * ROS ilklendiriliyor.
28 */
29 ros::init(argc, argv, "bumper_listener");
30
31 ros::NodeHandle n;
32
33 /**
34 * Subscriber tanımlanıyor.
35 * İlk parametre olarak dinlenecek topiğin adı, ardından bufferın büyüklüğü ve callback fonksiyonu tanımlanmaktadır.
36 */
37 ros::Subscriber sub = n.subscribe("bumper", 1000, chatterCallback);
38
39 ros::spin();
40
41 return 0;
42 }
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_bumper_subs) find_package(catkin REQUIRED COMPONENTS im_msgs roscpp rospy ) catkin_package() include_directories( ${catkin_INCLUDE_DIRS} ) add_executable(bumper_listener src/bumper_listener.cpp) add_dependencies(bumper_listener im_msgs_generate_messages_cpp) target_link_libraries(bumper_listener ${catkin_LIBRARIES} )
Yazdığımız ROS paketini derliyoruz.
> cd ~/catkin_ws/ > catkin_make
Yazdığımız bumper_listener düğümünü aşağıdaki gibi çalıştırıldığında, okunan verilerin ekrana yazılması beklenmektedir.
> rosrun evarobot_bumper_subs bumper_listener