vscode開發ROS(20)-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相關,公-衆-號搜索 ”機器人小站", 關注我們吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章