Python?實現(xiàn)驅(qū)動AI機(jī)器人
1.如果尚未啟動WSL-ROS環(huán)境,請運(yùn)行Windows
“開始”菜單中的WSL-ROS快捷方式。這將打開一個終端應(yīng)用程序和一個Ubuntu終端實例。我們將這個終端實例稱為終端1。
在終端中輸入以下命令,在一個空世界中啟動TurtleBot3華夫餅的模擬:
[TERMINAL 1] $ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
一個露臺模擬窗口應(yīng)該打開,在里面你會看到一個TurtleBot3華夫餅干
2.在新終端實例中,輸入以下命令:
?[TERMINAL 2] $ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
總結(jié):
到目前為止,您已經(jīng)使用roslaunch命令啟動了兩個單獨(dú)的ROS應(yīng)用程序。roslaunch
是啟動ROS項目的一種方式。正如您應(yīng)該從上述示例中觀察到的,我們以以下方式使用此命令:
roslaunch{package name}{launch file}
該命令將兩個參數(shù)作為輸入:{package name}是包含我們想要執(zhí)行的功能的ROS包的名稱,{launch file}是該包中的一個文件,它確切地告訴ROS我們想要啟動的包中的功能。
3.roscd是一個ROS命令,它允許我們導(dǎo)航到系統(tǒng)上安裝的任何ROS包的目錄,而無需我們事先知道該包的路徑。
打開一個新的終端實例(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
包的啟動文件通常位于包目錄中的啟動文件夾中。您應(yīng)該注意到上面ls命令的輸出中有一個啟動文件夾。
cd是一個Linux命令,允許我們更改終端當(dāng)前所在的目錄。用這個導(dǎo)航到turtlebot3_teleop package launch文件夾,然后再次使用ls查看其中的內(nèi)容。在這個文件夾中,你會看到turtlebot3_teleop_
鑰匙。
cat是一個Linux命令,我們可以使用它在終端中顯示文件的內(nèi)容。
pkg:包含我們想要啟動的功能的ROS包的名稱。
type:我們希望在該包中執(zhí)行的腳本(即ROS節(jié)點)的全名(包括文件擴(kuò)展名,如果有)。
名稱:我們想給ROS節(jié)點一個描述性名稱,用于在ROS網(wǎng)絡(luò)上注冊。
輸出:節(jié)點的任何輸出將被打印的位置(輸出將被打印到終端窗口的屏幕,或輸出將被打印到日志文件的日志)。
ROS節(jié)點是執(zhí)行特定機(jī)器人任務(wù)和操作的可執(zhí)行程序,如我們在上述示例中看到的遠(yuǎn)程(或“遠(yuǎn)程操作”)控制。
5.使用以下命令查看哪些節(jié)點當(dāng)前處于活動狀態(tài):
[TERMINAL 3] $ rosnode list
我們可以通過使用rqt_圖形包中的rqt_圖形節(jié)點來可視化活動節(jié)點之間的連接。我們可以使用rosrun直接啟動此節(jié)點(您可能會收到一些錯誤消息,但不要擔(dān)心):
[TERMINAL 3] $ rosrun rqt_graph rqt_graph
6.探索ROS主題和信息
通過使用rostopic ROS命令,我們可以了解關(guān)于/cmd_-vel主題的更多信息。
在新的終端實例(終端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
要完成此操作,請在仍在運(yùn)行的任何進(jìn)程(終端1、2和3)中輸入Ctrl+C,關(guān)閉所有活動的終端進(jìn)程。因此,相關(guān)的Gazebo和rqt_圖形窗口也應(yīng)關(guān)閉。
一兩分鐘后,您將用Python創(chuàng)建一些簡單的發(fā)布者和訂閱者節(jié)點,并在它們之間發(fā)送消息。正如我們之前了解到的,ROS應(yīng)用程序應(yīng)該包含在包中,因此我們需要創(chuàng)建一個包,以便開始創(chuàng)建我們自己的ROS節(jié)點。
ROS提供了一個工具來創(chuàng)建一個新的ROS包,并確保所有基本元素都存在:catkin_create_pkg
。
當(dāng)我們創(chuàng)建和使用自己的ROS包時,在特定的文件系統(tǒng)位置工作非常重要,這樣ROS就可以適當(dāng)?shù)卦L問和構(gòu)建所有內(nèi)容。這些空間被稱為“Catkin工作空間”,其中一個已經(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
到此這篇關(guān)于Python 實現(xiàn)驅(qū)動AI機(jī)器人的文章就介紹到這了,更多相關(guān)Python 驅(qū)動AI機(jī)器人內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Tensorflow的MNIST手寫數(shù)字識別分類
這篇文章主要為大家詳細(xì)介紹了基于Tensorflow的MNIST手寫數(shù)字識別分類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06Python處理yaml和嵌套數(shù)據(jù)結(jié)構(gòu)技巧示例
這篇文章主要為大家介紹了Python處理yaml和嵌套數(shù)據(jù)結(jié)構(gòu)技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06pyqt5教程QGraphicsScene及QGraphicsView使用基礎(chǔ)
這篇文章主要為大家介紹了pyqt5教程中QGraphicsScene及QGraphicsView使用基礎(chǔ),有序要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10解決運(yùn)行django程序出錯問題 ''str''object has no attribute''_meta''
這篇文章主要介紹了解決運(yùn)行django程序出錯問題 'str'object has no attribute'_meta',具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07