文章目录[隐藏]
前言
笔者最近在做一个和ROS机器人相关的项目,其中一部分要求实现的功能是用树莓派根据相关的指令同时去控制Uhand左右两只机械手的动作。实现这个功能的主要的坑在于:1)Uhand控制指令是一串十六进制的信号,我们因该如何通过串口去发送一连串中间只有以空格为间隔的十六进制数据呢?答案使用struct.pack模块,先将若干个十六进制指令进行打包,再对打包的数据进行发送。
准备工作
树莓派串口配置
具体配置过程可以参考这篇博客: 博客连接
树莓派串口通信
基本的树莓派串口通信过程可以参考下面这篇博客: 博客连接
树莓实现串口发送十六进制数据的代码
实现树莓派串口通信过程的代码如下所示。
# encoding: utf-8
"""
树莓派向机械手控制板发送控制信号
"""
import serial
import struct
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class Tohand():
def __init__(self):
# 指令的映射
self.handCommand = {u"love":(0x00, 0x01), u"hello":(0x01, 0x02), u"thank":(0x02, 0x03),
u"welcome":(0x04, 0x04), u"happy": (0x04, 0x05), u"dream": (0x05,0x06), u"forget": (0x06, 0x07)}
self.ser = serial.Serial('/dev/ttyUSB0', 9600, timeout = 0.5)
self.ser2 = serial.Serial('/dev/ttyUSB1', 9600, timeout = 0.5)
# 向Uhand右手发送控制信息
def sendToRight(self, words):
print self.handCommand[words][1]
# 对十六进制数据打包
pack = struct.pack("BBBBBBB", 0x55, 0x55, 0x05, 0x06, self.handCommand[words][1], 0x01, 0x00)
self.ser.write(pack)
# 向Uhand左手发送控制信息
def sendToLeft(self,words):
pack = struct.pack("BBBBBBB", 0x55, 0x55, 0x05, 0x06, self.handCommand[words][1], 0x01, 0x00)
self.ser2.write(pack)
版权声明:本文为CSDN博主「zyam」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyamor/article/details/122389531
前言
笔者最近在做一个和ROS机器人相关的项目,其中一部分要求实现的功能是用树莓派根据相关的指令同时去控制Uhand左右两只机械手的动作。实现这个功能的主要的坑在于:1)Uhand控制指令是一串十六进制的信号,我们因该如何通过串口去发送一连串中间只有以空格为间隔的十六进制数据呢?答案使用struct.pack模块,先将若干个十六进制指令进行打包,再对打包的数据进行发送。
准备工作
树莓派串口配置
具体配置过程可以参考这篇博客: 博客连接
树莓派串口通信
基本的树莓派串口通信过程可以参考下面这篇博客: 博客连接
树莓实现串口发送十六进制数据的代码
实现树莓派串口通信过程的代码如下所示。
# encoding: utf-8
"""
树莓派向机械手控制板发送控制信号
"""
import serial
import struct
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class Tohand():
def __init__(self):
# 指令的映射
self.handCommand = {u"love":(0x00, 0x01), u"hello":(0x01, 0x02), u"thank":(0x02, 0x03),
u"welcome":(0x04, 0x04), u"happy": (0x04, 0x05), u"dream": (0x05,0x06), u"forget": (0x06, 0x07)}
self.ser = serial.Serial('/dev/ttyUSB0', 9600, timeout = 0.5)
self.ser2 = serial.Serial('/dev/ttyUSB1', 9600, timeout = 0.5)
# 向Uhand右手发送控制信息
def sendToRight(self, words):
print self.handCommand[words][1]
# 对十六进制数据打包
pack = struct.pack("BBBBBBB", 0x55, 0x55, 0x05, 0x06, self.handCommand[words][1], 0x01, 0x00)
self.ser.write(pack)
# 向Uhand左手发送控制信息
def sendToLeft(self,words):
pack = struct.pack("BBBBBBB", 0x55, 0x55, 0x05, 0x06, self.handCommand[words][1], 0x01, 0x00)
self.ser2.write(pack)
版权声明:本文为CSDN博主「zyam」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyamor/article/details/122389531
暂无评论