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相关,公-众-号搜索 ”机器人小站", 关注我们吧。