Bu proje turtle_duvar_py adlı, Python (rclpy) ile yazılmış bir ROS 2 paketidir. Kaplumbağanın konumunu /turtle1/pose üzerinden dinler; /turtle1/cmd_vel üzerinden hareket komutu gönderir. Kaplumbağa x veya y değeri 1.0'ın altına ya da 10.0'ın üstüne geldiğinde / sınıra ulaştığında, duvardan yansıyacak şekilde yön değiştirir. Normal hareket sırasında ileri gider, dönerken durup kendi etrafında döner.
- Paket:
turtle_duvar_py,rclpy,geometry_msgs,turtlesimkullanılır. - Abone:
turtlesim/msg/Posetüründeki/turtle1/posekonusu;x,y,thetaokunur. - Yayıncı:
geometry_msgs/msg/Twisttüründeki/turtle1/cmd_velkonusu; duvarda açı hesaplanıp yön değiştirilir. - Log:
get_logger().info()ile konum saniyede bir yazdırılır. - Bonus:
hiz,alt_sinir,ust_sinirparametreleri vardır.
- Ubuntu üzerinde kurulmuş ROS 2 (örn. Humble, Jazzy veya Kilted)
turtlesimvepython3-colcon-common-extensions- ROS 2 ortamının terminale yüklenmesi (
source /opt/ros/<dagitim>/setup.bash)
Aşağıdaki örnek ROS 2 Jazzy içindir.
jazzyyerine sisteminizdeki dağıtımı yazın. Mevcut dağıtımlarıls /opt/rosile görebilirsiniz.
source /opt/ros/humble/setup.bash
sudo apt update
sudo apt install ros-$ROS_DISTRO-turtlesim python3-colcon-common-extensionsİndirilen turtle_duvar_py klasörünü çalışma alanındaki src içine yerleştirin:
mkdir -p ~/ros2_ws/src
cp -r turtle_duvar_py ~/ros2_ws/src/
cd ~/ros2_ws
source /opt/ros/humble/setup.bash
colcon build --packages-select turtle_duvar_py
source install/setup.bash
cp -rkomutunu,turtle_duvar_pyklasörünün bulunduğu dizinde çalıştırın. Eğer klasör zaten~/ros2_ws/srciçindeyse kopyalamayın.
cd ~/ros2_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch turtle_duvar_py turtle_duvar.launch.pyBu komut hem turtlesim penceresini hem de kontrol düğümünü açar.
İlk terminal:
source /opt/ros/humble/setup.bash
ros2 run turtlesim turtlesim_nodeİkinci terminal:
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
ros2 run turtle_duvar_py duvar_kontrolKontrol düğümünü ayrı başlatırken varsayılan hızı ve sınırları değiştirebilirsiniz:
ros2 run turtle_duvar_py duvar_kontrol --ros-args \
-p hiz:=1.5 -p alt_sinir:=1.5 -p ust_sinir:=9.5Varsayılan parametreler: hiz=2.0, alt_sinir=1.0, ust_sinir=10.0. Sınırlar için 0 < alt_sinir < ust_sinir < 11 koşulu aranır. Bu parametreler düğüm başlarken okunur; değiştirmek için düğüm yeniden başlatılır.
/turtle1/posemesajındanx,yvethetaalınır.- 0.05 saniyelik zamanlayıcı (20 Hz) hareket komutlarını günceller.
- Konum sınıra geldiğinde kaplumbağanın gittiği yön duvarın dışını gösteriyorsa yansıma açısı hesaplanır.
- Sağ veya sol duvar:
yeni_aci = pi - theta - Üst veya alt duvar:
yeni_aci = -theta - Köşede her iki kural sırayla uygulanır.
- Sağ veya sol duvar:
- Kaplumbağa önce ileri hareketi durdurur, uygun açıya döner, ardından ileri gitmeye devam eder.
- Bir saniyelik zamanlayıcı, konumu
logger.infoile terminale yazar.
Yalnızca duvara doğru gidildiğinde dönüş başlatıldığı için, duvardan uzaklaşırken aynı duvara tekrar tekrar takılmaz.
Bunlar örnek biçimdir; gerçek değerler çalıştırma sırasında değişir.
[INFO] [duvar_kontrol]: Duvar kontrol basladi. Hiz=2.0, sinirlar=[1.0, 10.0]
[INFO] [duvar_kontrol]: Konum: x=6.25, y=5.54, theta=0.00
[INFO] [duvar_kontrol]: Duvara yaklasildi! x=10.02, y=5.54; yon degistiriliyor.
[INFO] [duvar_kontrol]: Konum: x=9.86, y=5.54, theta=3.14
turtle_duvar_py/
├── package.xml
├── setup.py
├── setup.cfg
├── README.md
├── .gitignore
├── resource/
│ └── turtle_duvar_py
├── turtle_duvar_py/
│ ├── __init__.py
│ ├── duvar_kontrol.py
│ └── hareket_mantigi.py
├── launch/
│ └── turtle_duvar.launch.py
├── test/
│ └── test_hareket_mantigi.py
└── ekran_goruntuleri/
└── README.md
ROS 2 kurulumu gerektirmeyen hesaplama testleri:
cd ~/ros2_ws/src/turtle_duvar_py
python3 -m unittest discover -s test -vDüğümlerin ROS 2 konularını doğru kullanıp kullanmadığını görmek için:
ros2 topic echo /turtle1/pose
ros2 topic info /turtle1/cmd_velGerçek uygulamayı çalıştırdıktan sonra ekran_goruntuleri/ içine en az şu üç görseli ekleyin:
01_turtlesim_hareket.png: turtlesim penceresinde hareket izi.02_terminal_log.png: terminaldeKonum:satırları.03_duvar_donusu.png: terminaldeDuvara yaklasildi!satırı ve dönüş.
Ubuntu'da PrtSc tuşuyla ekran görüntüsü alabilir, PNG dosyalarını bu klasöre taşıyabilirsiniz.
Not: Bu proje çalıştırılmamış bir ortamda oluşturuldu; gerçek ROS 2 ekran görüntüleri teslim paketine dahil değildir.
GitHub'da turtle_duvar_py adlı boş bir depo oluşturun (README ekleme seçeneğini kapatın). Ardından:
cd ~/ros2_ws/src/turtle_duvar_py
git init
git add .
git commit -m "ROS2 duvardan kacan kaplumbaga odevi"
git branch -M main
git remote add origin https://github.com/KULLANICI_ADINIZ/turtle_duvar_py.git
git push -u origin mainKULLANICI_ADINIZ bölümünü kendi GitHub kullanıcı adınızla değiştirin. GitHub'a gönderirken gerçek ekran görüntülerini de ekran_goruntuleri/ dizinine koyup commit edin. Ödev teslim alanına bu GitHub depo bağlantısını verin.