溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python如何實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人

發(fā)布時(shí)間:2022-02-17 09:12:06 來源:億速云 閱讀:174 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Python如何實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

1.如果尚未啟動(dòng)WSL-ROS環(huán)境,請(qǐng)運(yùn)行Windows“開始”菜單中的WSL-ROS快捷方式。這將打開一個(gè)終端應(yīng)用程序和一個(gè)Ubuntu終端實(shí)例。我們將這個(gè)終端實(shí)例稱為終端1。

在終端中輸入以下命令,在一個(gè)空世界中啟動(dòng)TurtleBot3華夫餅的模擬:

[TERMINAL 1] $ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

一個(gè)露臺(tái)模擬窗口應(yīng)該打開,在里面你會(huì)看到一個(gè)TurtleBot3華夫餅干

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

 [TERMINAL 2] $ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

總結(jié):

到目前為止,您已經(jīng)使用roslaunch命令啟動(dòng)了兩個(gè)單獨(dú)的ROS應(yīng)用程序。roslaunch是啟動(dòng)ROS項(xiàng)目的一種方式。正如您應(yīng)該從上述示例中觀察到的,我們以以下方式使用此命令:

roslaunch{package name}{launch file}

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

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

打開一個(gè)新的終端實(shí)例(terminal 3),并使用roscd命令導(dǎo)航到Linux文件系統(tǒng)上的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

包的啟動(dòng)文件通常位于包目錄中的啟動(dòng)文件夾中。您應(yīng)該注意到上面ls命令的輸出中有一個(gè)啟動(dòng)文件夾。
cd是一個(gè)Linux命令,允許我們更改終端當(dāng)前所在的目錄。用這個(gè)導(dǎo)航到turtlebot3_teleop package launch文件夾,然后再次使用ls查看其中的內(nèi)容。在這個(gè)文件夾中,你會(huì)看到turtlebot3_teleop_鑰匙。
cat是一個(gè)Linux命令,我們可以使用它在終端中顯示文件的內(nèi)容。

pkg:包含我們想要啟動(dòng)的功能的ROS包的名稱。
type:我們希望在該包中執(zhí)行的腳本(即ROS節(jié)點(diǎn))的全名(包括文件擴(kuò)展名,如果有)。
名稱:我們想給ROS節(jié)點(diǎn)一個(gè)描述性名稱,用于在ROS網(wǎng)絡(luò)上注冊(cè)。
輸出:節(jié)點(diǎn)的任何輸出將被打印的位置(輸出將被打印到終端窗口的屏幕,或輸出將被打印到日志文件的日志)。
ROS節(jié)點(diǎn)是執(zhí)行特定機(jī)器人任務(wù)和操作的可執(zhí)行程序,如我們?cè)谏鲜鍪纠锌吹降倪h(yuǎn)程(或“遠(yuǎn)程操作”)控制。

5.使用以下命令查看哪些節(jié)點(diǎn)當(dāng)前處于活動(dòng)狀態(tài):

[TERMINAL 3] $ rosnode list

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

[TERMINAL 3] $ rosrun rqt_graph rqt_graph

6.探索ROS主題和信息

通過使用rostopic ROS命令,我們可以了解關(guān)于/cmd_-vel主題的更多信息。

在新的終端實(shí)例(終端4)中,鍵入以下內(nèi)容:

[TERMINAL 4] $ rostopic info /cmd_vel

內(nèi)容的輸出:

 Type: geometry_msgs/Twist

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

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

要完成此操作,請(qǐng)?jiān)谌栽谶\(yùn)行的任何進(jìn)程(終端1、2和3)中輸入Ctrl+C,關(guān)閉所有活動(dòng)的終端進(jìn)程。因此,相關(guān)的Gazebo和rqt_圖形窗口也應(yīng)關(guān)閉。

一兩分鐘后,您將用Python創(chuàng)建一些簡(jiǎn)單的發(fā)布者和訂閱者節(jié)點(diǎn),并在它們之間發(fā)送消息。正如我們之前了解到的,ROS應(yīng)用程序應(yīng)該包含在包中,因此我們需要?jiǎng)?chuàng)建一個(gè)包,以便開始創(chuàng)建我們自己的ROS節(jié)點(diǎn)。
ROS提供了一個(gè)工具來創(chuàng)建一個(gè)新的ROS包,并確保所有基本元素都存在:catkin_create_pkg。
當(dāng)我們創(chuàng)建和使用自己的ROS包時(shí),在特定的文件系統(tǒng)位置工作非常重要,這樣ROS就可以適當(dāng)?shù)卦L問和構(gòu)建所有內(nèi)容。這些空間被稱為“Catkin工作空間”,其中一個(gè)已經(jīng)在WSL-ROS環(huán)境中創(chuàng)建:稱為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如何實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人

Python如何實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人

感謝各位的閱讀!關(guān)于“Python如何實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI