ros與arduino串口通信python
寫在最前
這篇文章是上一篇中, arduino與ros進行串口通信的python實現版本. 可以對照查看, vscode開發ROS(19)-ros與arduino串口通信(c++).
安裝pyserial
python中比較常用的串口通信的工具就是pyserial. 安裝方法也比較簡單:
sudo pip install pyserial -i https://pypi.tuna.tsinghua.edu.cn/simple
這裏使用的是清華大學的源, 速度快一點, 雖然pyserial好像也沒多大.
修改vscode配置文件
在.vscode文件夾下, 打開settings.json
文件, 加入系統的python包路徑.
"python.autoComplete.extraPaths": [
"/opt/ros/kinetic/lib/python2.7/dist-packages",
"/usr/lib/python2.7/dist-packages"
]
創建ros節點
1, 在scripts文件夾中, 新建pySerialTest.py
文件.
2, 粘貼以下代碼
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import serial #導入serial包
import rospy
import time
def node():
rospy.init_node("serial_test") #初始化ros節點
ser = serial.Serial("/dev/ttyUSB0", 9600, timeout=1) #打開串口, 端口號:"/dev/ttyUSB0". 波特率:9600. 延時等待1s
if ser.isOpen(): #判斷串口是否打開
print("串口打開成功")
else:
print("串口打開失敗")
quit()
while not rospy.is_shutdown():
ser.write('hello')#發送hello
time.sleep(1)#等待1s
cnt = ser.inWaiting() #等待接受數據
if cnt > 0 : #接受數據量大於0
rev = ser.read(cnt) #讀數據
print(str(rev)) #打印
if __name__ == '__main__':
try:
node()
except rospy.ROSInterruptException:
pass
3, 具體介紹請看註釋, 代碼是超級簡單.
4, 使用vscode的終端中cd命令,定位到pySerialTest.py
文件
cd src/ros_test/scripts/
5, 執行指令, 這一步是爲了讓pySerialTest.py
文件具有可執行權限, 不可缺少
chmod 0777 pySerialTest.py
運行ROS節點
1, 使用快捷鍵Ctrl + Shift + T 彈出系統終端,輸入roscore
,啓用整個ROS總節點。
2, 使用快捷鍵Ctrl + Shift + T 彈出系統終端,輸入rosrun ros_test pyCalRectAreaRes.py
,啓用pyCalRectAreaRes.py節點。
可以看到ros的python節點與arduino通信成功.
如果提示"串口打開失敗", 請確認串口權限已經配置好, 且沒有被其他程序佔用.
如果提示"文件不存在", 請確認插入了arduino且arduino的端口號沒有改變, arduino在插拔中是可能改變的.
後記
更多機器人ROS相關,公-衆-號搜索 ”機器人小站", 關注我們吧。