Python 實現驅動AI機器人

1.如果尚未啟動WSL-ROS環境,請運行Windows“開始”菜單中的WSL-ROS快捷方式。這將打開一個終端應用程序和一個Ubuntu終端實例。我們將這個終端實例稱為終端1。

在終端中輸入以下命令,在一個空世界中啟動TurtleBot3華夫餅的模擬:

[TERMINAL 1] $ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

一個露臺模擬窗口應該打開,在裡面你會看到一個TurtleBot3華夫餅幹

2.在新終端實例中,輸入以下命令:

 [TERMINAL 2] $ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

總結:

到目前為止,您已經使用roslaunch命令啟動瞭兩個單獨的ROS應用程序。roslaunch是啟動ROS項目的一種方式。正如您應該從上述示例中觀察到的,我們以以下方式使用此命令:

roslaunch{package name}{launch file}

該命令將兩個參數作為輸入:{package name}是包含我們想要執行的功能的ROS包的名稱,{launch file}是該包中的一個文件,它確切地告訴ROS我們想要啟動的包中的功能。

3.roscd是一個ROS命令,它允許我們導航到系統上安裝的任何ROS包的目錄,而無需我們事先知道該包的路徑。

打開一個新的終端實例(terminal 3),並使用roscd命令導航到Linux文件系統上的turtlebot3_teleop包目錄:

4.In TERMINAL 3 enter $ cd ~ to go back to your home directory

[TERMINAL 3] $ roscd turtlebot3_teleop
[TERMINAL 3] $ pwd
[TERMINAL 3] $ ls
[TERMINAL 3] $ ls -F
[TERMINAL 3] $ cat turtlebot3_teleop_key.launch

包的啟動文件通常位於包目錄中的啟動文件夾中。您應該註意到上面ls命令的輸出中有一個啟動文件夾。
cd是一個Linux命令,允許我們更改終端當前所在的目錄。用這個導航到turtlebot3_teleop package launch文件夾,然後再次使用ls查看其中的內容。在這個文件夾中,你會看到turtlebot3_teleop_鑰匙。
cat是一個Linux命令,我們可以使用它在終端中顯示文件的內容。

pkg:包含我們想要啟動的功能的ROS包的名稱。
type:我們希望在該包中執行的腳本(即ROS節點)的全名(包括文件擴展名,如果有)。
名稱:我們想給ROS節點一個描述性名稱,用於在ROS網絡上註冊。
輸出:節點的任何輸出將被打印的位置(輸出將被打印到終端窗口的屏幕,或輸出將被打印到日志文件的日志)。
ROS節點是執行特定機器人任務和操作的可執行程序,如我們在上述示例中看到的遠程(或“遠程操作”)控制。

5.使用以下命令查看哪些節點當前處於活動狀態:

[TERMINAL 3] $ rosnode list

我們可以通過使用rqt_圖形包中的rqt_圖形節點來可視化活動節點之間的連接。我們可以使用rosrun直接啟動此節點(您可能會收到一些錯誤消息,但不要擔心):

[TERMINAL 3] $ rosrun rqt_graph rqt_graph

6.探索ROS主題和信息

通過使用rostopic ROS命令,我們可以瞭解關於/cmd_-vel主題的更多信息。

在新的終端實例(終端4)中,鍵入以下內容:

[TERMINAL 4] $ rostopic info /cmd_vel

內容的輸出:

 Type: geometry_msgs/Twist

 Publishers:
  * /turtlebot3_teleop_keyboard (http://localhost:#####/)

 Subscribers:
  * /gazebo (http://localhost:#####/)
[TERMINAL 4] $ rosmsg info geometry_msgs/Twist

要完成此操作,請在仍在運行的任何進程(終端1、2和3)中輸入Ctrl+C,關閉所有活動的終端進程。因此,相關的Gazebo和rqt_圖形窗口也應關閉。

一兩分鐘後,您將用Python創建一些簡單的發佈者和訂閱者節點,並在它們之間發送消息。正如我們之前瞭解到的,ROS應用程序應該包含在包中,因此我們需要創建一個包,以便開始創建我們自己的ROS節點。
ROS提供瞭一個工具來創建一個新的ROS包,並確保所有基本元素都存在:catkin_create_pkg
當我們創建和使用自己的ROS包時,在特定的文件系統位置工作非常重要,這樣ROS就可以適當地訪問和構建所有內容。這些空間被稱為“Catkin工作空間”,其中一個已經在WSL-ROS環境中創建:稱為Catkin_ws

#!/usr/bin/env python3
# A simple ROS publisher node in Python

import rospy
from std_msgs.msg import String

class Publisher():
    
    def __init__(self):
        self.node_name = "simple_publisher"
        topic_name = "chatter"

        self.pub = rospy.Publisher(topic_name, String, queue_size=10)
        rospy.init_node(self.node_name, anonymous=True)
        self.rate = rospy.Rate(10) # hz
                
        self.ctrl_c = False
        rospy.on_shutdown(self.shutdownhook) 
        
        rospy.loginfo(f"The '{self.node_name}' node is active...")

    def shutdownhook(self):
        print(f"Stopping the '{self.node_name}' node at: {rospy.get_time()}")
        self.ctrl_c = True

    def main_loop(self):
        while not self.ctrl_c:
            publisher_message = f"rospy time is: {rospy.get_time()}"
            self.pub.publish(publisher_message)
            self.rate.sleep()

if __name__ == '__main__':
    publisher_instance = Publisher()
    try:
        publisher_instance.main_loop()
    except rospy.ROSInterruptException:
        pass

到此這篇關於Python 實現驅動AI機器人的文章就介紹到這瞭,更多相關Python 驅動AI機器人內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: