您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

01 ros發布和訂閱python(ROS使用python3)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-06 15:05:49【】3人已围观

简介如何編寫ros的python程序ROSIndigo beginner_Tutorials-10 編寫 ROS 話題版的 HelloWorld 

如何編寫ros的python程序

ROS Indigo beginner_Tutorials-10 編寫 ROS 話題版的 Hello World 程序(Python版)

我使用的虛擬機軟件:VMware Workstation 11 

使用的Ubuntu系統:Ubuntu 14.04.4 LTS 

ROS 版本:ROS Indigo

1. 前言 :

Hello world 程序,在我們編程界,代表學習某種語言編寫的第一個程序。對于 ROS 機器人操作系統來說,這個 Hello World 程序就是 : 寫一個簡單的消息發布器(發送) 和 訂閱器(接收)。

2. 準備工作 :

C++ 的程序都會存放在每個程序包的 src 文件夾里。 Python 不同,Python 程序都存放在 scripts 文件夾中, 反正意思都是 源文件 包。 

Step 1 . 所以,先在 beginner_tutorials 軟件包中創建一個 scripts 文件夾:

$ roscd beginner_tutorials$ mkdir scripts$ cd scripts123

3. 編寫消息發布器節點程序:

如果你懶得去寫的話,你可以使用 wget 命令, 在 github 上獲取一個 talker.py 源代碼。如何獲取呢 ? 

Step 2 . 開一個終端,輸入下面的命令就可以獲取 talker.py :

$ wget 

-devel/rospy_tutorials/001_talker_listener/talker.py$ ls

talker.py123

但是我建議你親自動手,寫一寫:手動創建一個 talker.py 文件在 /scripys 文件夾里:

$ roscd beginner_tutorials/scripts$ gedit talker.py12

將這上面鏈接里的代碼手動輸入到 talker.py 文件中。(我就不將代碼貼上來了)

下面我來講解一下代碼:

Step 3 . 最后一步,給這個 talker.py 文件加上可執行權限:

$ chmod +x talker.py1

這樣,一個發布器就編寫完了。我們不要急著去運行它,現在我們編寫一個訂閱器,來接收這個發布器發布的話題:

4. 編寫消息訂閱器節點程序:

Step 4 . 和發布器一樣,我們使用wget命令獲取訂閱器的源代碼 listener.py:

$ roscd beginner_tutorials/scripts/$ wget 

ials/indigo-devel/rospy_tutorials/001_talker_listener/listener.py$ ls

listener.py  talker.py1234

但是,我還是建議你自己動手寫一下。

好吧,下面我們開始講解 listener.py 里面的代碼,這個listener.py程序的代碼簡單:

Step 5 . 最后不要忘了給這個listener.py 加可執行權限:

$ chmod +x listener.py1

5. 運行 :

對于python 來說,我們不需要使用 catkin_make 命令對 ~/catkin_ws 工作空間進行編譯。因為python文件本身就是可執行文件(前提是我們給它添加可執行權限)。

OK,發布器 和 訂閱器 都創建完了。下面我們運行它們,看看效果:

Step 6 . 新打開一個終端,先執行 ros買粉絲re 命令:

$ ros買粉絲re1

Step 7 . 新打開一個終端,啟動 發布器 :

$ rosrun beginner_tutorials talker.py  1

Step 8 . 新打開一個終端,啟動 訂閱器 :

$ rosrun beginner_tutorials listener.py 1

運行效果:

Step 9 . 我們來使用 rostopic list ,看看當前的話題有哪些:

$ rostopic list

/chatter

/rosout

/rosout_agg1234

其中 /chatter 就是我們在發布器里面發布的 ROS話題。

6. 擴展,編寫一個啟動腳本文件 :

還記得上一節,我們講的ROS的啟動腳本文件吧,下面我們來編寫一個launch文件,來將 talker.py 和listener.py 文件的啟動工作交個這個launch文件來做:

Step 10 . 來到 beginner_tutorials程序包的 /launch 路徑下,新建一個 hello_world_topic.launch 文件:

$ roscd  beginner_tutorials/launch$ gedit hello_world_topic.launch   #使用你自己喜歡的文本編輯器12

Step 11 . 輸入下面的代碼:

<launch>

<node pkg="beginner_tutorials" name="talker" type="talker.py" />

<node pkg="beginner_tutorials" name="listener" type="listener.py" /></launch>1234

Step 12 . 現在,將之前打開的終端都關閉,我們啟動這個腳本: (開一個終端 : Ctrl+Alt+T)

$ roslaunch beginner_tutorials hello_world_topic.launch1

運行結果:

上面截圖的輸出顯示: talker.py 和 listener.py 腳本運行成功。但是并沒有出現刷屏的現象。這是為什么? 為了證明這個腳本程序真的成功的運行了,我們來試一試:

Step 13 . 重新開一個終端,輸入下面的命令:

$ rosrun list$ rostopic list$ rostopic echo /chatter123

Step 14 . 現在 Ctrl+C 結束監聽 /chatter 話題。使用 rqt_graph 對當前啟動的節點可視化:

$ rqt_graph1

這些足以說明,hello_world_topic.launch 啟動腳本文件,啟動成功。

總結: 發布器 和 訂閱器 是很簡單的, 就是簡單的發布一個 自定義的話題。

我之前使用說過:節點之間通訊的方式有兩種 : 話題(rostopic) 和 服務(rosservice)

所以,接下來,我們會講:使用ROS服務來完成ROS版 Hello World 程序的例子。但是在這之前,我們需要學一學:如何創建自定義的ROS消息和ROS服務,以便 ROS 服務版的 Hello World 程序的編寫。 

所以下一講,我們來學習:如何創建自定義的ROS消息和ROS服務。

ROS使用python3

參考:

為了使用python3的圖像處理程序,需要使用到ros接口,但是由于原生ros接口不支持python3,只能使用python2.7(時間2020-07,版本melodic),一下步驟主要為了使用ros調用的方式調用python3的程序

由于ros接收圖像數據使用的是cv_bridge 接口,所以先編譯python3版本的cv_bridge

注意:此時要先安裝好python3的環境,可以按照以下方式安裝

進入到工作空間進行編譯

會有如下提示

編譯完成后,可以在工作路徑下的install文件夾里生成需要的庫,需要使用python3版本的cv_bridge時,就將這個環境變量導入即可

extend參數的作用是讓這次的路徑配置不影響之前配置好的路徑

1. 在使用rosrun 運行程序時,默認還會調用原生melodic的cv_bridge

我的處理方法是將原來的python版本cv_bridge刪除

2. 編譯完成會有錯誤提示,如下圖,但不影響使用

編譯安裝:

在編譯時,使用如下命令:

編譯過程中會有錯誤提示

解決方法:

參考 買粉絲s://answers.ros.org/question/257757/importerror-no-mole-named-em-error/

很赞哦!(32)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:云南昆明盘龙区

工作室:小组

Email:[email protected]