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. |
Enkoder
Description: Enkoderlerden veri okuma ve odom konum hesabı.Tutorial Level: BEGINNER
Next Tutorial: IMU
Enkoder Sensörünü Çalıştırma
Evarobot üzerindeki enkoder sensörleri çalıştırmadan önce Evarobot'a ssh ile bağlanılır.
# evarobot > ssh pi@evarobotDSK > sudo -s
Enkoder sensörleri çalıştırmak için aşağıdaki kodu terminalde çalıştırmak yeterli olacaktır. evarobot_odometry isimli launch dosyası enkoder sensörlerini çalıştırmakta ve robotun bağıl konumu ve hızını hesaplamaktadır. Launch dosyasının aldığı parametreler hakkında bilgi almak için evarobot_odometry sayfasını kullanabilirsiniz.
# evarobot > roslaunch evarobot_odometry evarobot_odometry.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
Enkoder Sensörlerini Terminalden Okuma
Bilgisayar tarafında terminalden enkoderlerden gelen veri ile hesaplanan konum ve hız bilgilerini 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 hesaplanan robotun bağıl konum ve hız okunabilir.
# pc > rostopic echo /odom
Topik hakkında bilgi almak için ise aşağıdaki kod kullanılır.
# pc > rostopic info /odom
Enkoder Konum Bilgisini Okumak icin Basit Subscriber Yazma
Catkin çalışma alanında evarobot_odom_subs adında paket oluşturulur.
> cd ~/catkin_ws/src > catkin_create_pkg evarobot_odom_subs nav_msgs rospy roscpp
Oluşturulan paketin içerinde /src klasörü altında odom_listener.cpp isminde c++ dosyası oluşturulur.
> cd ~/catkin_ws/src/evarobot_odom_subs > mkdir -p ~/catkin_ws/src/evarobot_odom_subs/src > cd src > gedit odom_listener.cpp
odom_listener.cpp dosyasının içerisine yazılacak kod aşağıda verilmektedir.
1 #include "ros/ros.h"
2 #include "nav_msgs/Odometry.h"
3
4 /**
5 * Bu örnekte evarobot üzerindeki bağıl konum ve hız 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 nav_msgs::Odometry::ConstPtr& msg)
13 {
14 ROS_INFO("Seq: [%d]", msg->header.seq);
15 ROS_INFO("Position-> x: [%f], y: [%f], z: [%f]", msg->pose.pose.position.x,msg->pose.pose.position.y, msg->pose.pose.position.z);
16 ROS_INFO("Orientation-> x: [%f], y: [%f], z: [%f], w: [%f]", msg->pose.pose.orientation.x, msg->pose.pose.orientation.y, msg->pose.pose.orientation.z, msg->pose.pose.orientation.w);
17 ROS_INFO("Vel-> Linear: [%f], Angular: [%f]", msg->twist.twist.linear.x,msg->twist.twist.angular.z);
18 }
19
20 int main(int argc, char **argv)
21 {
22 /**
23 * ROS ilklendiriliyor.
24 */
25 ros::init(argc, argv, "odom_listener");
26
27 ros::NodeHandle n;
28
29 /**
30 * Subscriber tanımlanıyor.
31 * İlk parametre olarak dinlenecek topiğin adı, ardından bufferın büyüklüğü ve callback fonksiyonu tanımlanmaktadır.
32 */
33 ros::Subscriber sub = n.subscribe("odom", 1000, chatterCallback);
34
35 ros::spin();
36
37 return 0;
38 }
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_odom_subs) find_package(catkin REQUIRED COMPONENTS nav_msgs roscpp rospy ) catkin_package() include_directories( ${catkin_INCLUDE_DIRS} ) add_executable(odom_listener src/odom_listener.cpp) add_dependencies(odom_listener nav_msgs_generate_messages_cpp) target_link_libraries(odom_listener ${catkin_LIBRARIES} )
Yazdığımız ROS paketini derliyoruz.
> cd ~/catkin_ws/ > catkin_make
Yazdığımız odom_listener düğümünü aşağıdaki gibi çalıştırıldığında, okunan verilerin ekrana yazılması beklenmektedir.
> rosrun evarobot_odom_subs odom_listener