一般来说机器人平台包括:交互界面+主站+通讯协议+从站。
通信
-
BS架构和CS架构的区别、CS架构和BS架构的区别
BS的处理部分基本都集中在Server上,Browser只起到“浏览器”的作用。 -
电机驱动器-copley 、copley-control-software-official
copley驱动器上面有Canopen,RS232以及EtherCat这三种接口,其中RS232可以通过ASCII码值进行控制CME2是一种ドライバー設定/調整ソフトウェア,CML – C ++運動庫(收费)、CMO – Copley運動對象、CPL – Copley編程語言。
更多的信息可以参考copley的官方微信公众号,这里给出CML - Copley提供的运动控制程序开发类库
【CME2和RS232的使用】:
- 使用CME2配置Copley驱动器,带Maxon电机
- CME上位机控制Copley驱动MAXON电机
- ARM中FLASH和RAM、ROM的区别。普通的单片机主要用作程序存贮器就是FLASH,也就是替代以前的ROM,最大的优点是降低了芯片的成本并且可以做到电擦写。FLASH&ROM掉电保存,RAM掉电不保存。
- RS-232 ASCII Motion Control - Using USB to RS-232 adapter with Copley Controls Drive
% positon control page 28 s r0x24 21 s r0xca 1048576(20位编码器转一圈) t 1 % read positon page 29 g r0x32
【read digital inputs】可使用参数0xa6读取驱动器可编程数字输入的高/低状态。每个位表示下文所示的输入编号。如果输入量较高,则对应位设置为 1。如果输入量较低,则对应位设置为 0。例如,如果0xa6值为 33,二进制当量为 100001,则显示 IN1 和 IN6 较高,其他输入值较低。
g r0xa6
【read/set digital outputs】驱动器数字输出可由 CME 2 编程,以反映驱动器中任何一个或多个事件状态寄存位的状态。输出也可以配置,以便其状态可以由控制器程序设置。
外部控制器通过输出状态参数可以设置输出处于非活动状态或活动状态。但是,输出引脚的实际水平由输出配置参数决定。此参数将实际输出引脚设置为活动时的高或低。(when active, set high or low) 当驱动器启动或重置时,所有输出最初都是非活动状态。为了确保输出在启动或重置电源后处于高或关闭状态,应将输出配置为活动低输出。 (需要验证一下)
*可以考虑使用python自动生成ASCII码,ASCII码可以在 hyperterminal is ハイパーターミナルは、Microsoft Windowsシリーズに搭載されている端末エミュレータの名称である。通信ケーブルを経由して別の端末に接続して作業を行うことができる。ハイパーターミナルはHilgraeve社の端末エミュレータ製品HyperACCESSのローエンドバージョンである。Windows 95からWindows XPにバンドルされたが、Windows Vista以降のバージョンにはバンドルされていない。
【关于canopen和EtherCAT】:
- 【机器人实际控制】+EtherCAT总线技术+①概论 、有关CAN和CANopen的一些基本介绍
一种总线技术,对每个节点进行遍历,存在反馈机制,CAN(最底层)->CANopen(应用)->EtherCAT(应用) - RS232、RS485、CAN、CAN Open、Modbus、UART、Ethernet、EtherCat、TCP/IP之间是什么关系、OSI(开放式通信系统互联参考模型)的七层、OSI 七层模型和TCP/IP模型及对应协议(详解)
- 计算机网络漫谈:OSI七层模型与TCP/IP四层(参考)模型(转载)
【CML与canopen】:
- 主要参考文档CANopen Programmer’s Manual和CML-Reference-Manual
【copley驱动器在Ubuntu环境下的配置】->在Ubuntu系统下Copley CAN-PCI驱动的安转和开机自启动配置
在Copley官网上下载CAN-PCI驱动,链接如下:
(http://www.copleycontrols.com/Motion/CanFiles/copleycan-1.02.0.tgz)
对程序包进行解压,使用以下指令:
tar xzf copleycan-1.02.0.tgz
解压后,建立一个驱动的源文件夹,并进入到该驱动的目录路径下,使用如下指令对驱动进行编译:
make
编译成功后,会在驱动文件加下生成名为copleycan.ko文件
为了将驱动嵌入到Linux运行的内核中,执行如下指令:
sudo insmod copleycan.ko
之后就可以对驱动进行安装了,执行如下指令:
make install
安装成功后,系统会检测到有CAN卡下系统中,在dev文件夹下生成copleycan00和copleycan01文件。
以下为驱动的开机自启动设置
1.创建一个 rules 文件
在/etc/udev/rules.d 文件夹中创建 copley.rules 文件
命令:cd /etc/udev/rules.d
sudo gedit Copley.rules
gedit 编辑器将会打开一个文本框,在其中输入如下
KERNEL==”copleycan*”,
MODE=”0666”
点击保存,关闭文档。
该 rules 文档的作用是在安装驱动的时候将 copleycan.ko 文件拷贝到
/lib/modules/3.13.0-32-generic/misc/copleycan.ko 目录下,红色部分为 linux 内核版本,以机
器系统版本为准,红色部分仅供参考。
2.让命令终端开机时将 copleycan 驱动加载到系统内核
sudo gedit /etc/copleycan.script
编辑器将打开一个文本框,在其中加入如下代码(红色部分以实际系统版本为准)
insmod /lib/modules/3.13.0-32-generic/misc/copleycan.ko
然后设置命令终端 //16.04版本
sudo gedit /etc/rc.local
编辑器将打开一个文本框,在 exit 0 之前添加如下代码
sh /etc/copleycan.script
permission issue:
sudo chmod -R 666 /dev/copleycan*
其中参考了:.rules文件创建
【一些常用术语的解释】:
CANOPEN总线
人机交互
这里的人机交互主要定义为:输入和显示。输入为win10环境下的xbox手柄。
手柄:
可以用非官方蓝牙,但是只能链接一个手柄设备,之前用的是ps4手柄,这次是xbox手柄略有不同,链接过程中的问题见here,驱动是自动安装的其实就是蓝牙连接的案件位置不同,然后就是测试手柄,测试通过后下载pygame的轮子,注意对应版本
pip debug --verbose
就可以开始编码了。可以参考:
看门狗:为了保证节点的稳定性,需要增加看门狗功能,就是两个节点相互监控,一旦另一个节点死了就会立即重启对方,一个节点一旦运行不正常,那么另一个节点就将其重置。
- python实现看门狗功能,用来实现对文件操作进行监测 ,这里偷师直接复制下来
from watchdog.observers import Observer
from watchdog.events import *
import time
class FileEventHandler(FileSystemEventHandler):
def __init__(self):
FileSystemEventHandler.__init__(self)
def on_moved(self, event):
if event.is_directory:
print("directory moved from {0} to {1}".format(event.src_path, event.dest_path))
else:
print("file moved from {0} to {1}".format(event.src_path, event.dest_path))
def on_created(self, event):
if event.is_directory:
print("directory created:{0}".format(event.src_path))
else:
print("file created:{0}".format(event.src_path))
def on_deleted(self, event):
if event.is_directory:
print("directory deleted:{0}".format(event.src_path))
else:
print("file deleted:{0}".format(event.src_path))
def on_modified(self, event):
if event.is_directory:
print("directory modified:{0}".format(event.src_path))
else:
print("file modified:{0}".format(event.src_path))
if __name__ == "__main__":
observer = Observer()
event_handler = FileEventHandler()
observer.schedule(event_handler, "F:\ ", True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
cmd查看进程
tasklist | findstr “ptython.exe”
通过setproctitle方式似乎在windows下无效,只能先生成exe文件然后再相互之间监控了。
这里找到了一个监控进程的脚本。
import psutil
def judgeprocess(processname):
pl = psutil.pids()
for pid in pl:
if psutil.Process(pid).name() == processname:
print(pid)
break
else:
print("not found")
if judgeprocess('xxx.exe') == 0:
print('success')
else:
pass
关于进程,主要参考了:(思路上有问题)
- 如何在Python中产生一个新的独立进程
- windows终端中类似于nohup的后台运行命令
- 使用Python打开新的终端(terminal)并执行语句
- 做了一个监控 windows 程序进行重启的小玩意儿,遇到个 bug。。。
其他参考:
socket通讯
数据传输:使用socket通讯的方式,数据传输时要考虑到不同语言、字符串转化和对齐的问题。
- make client socket wait for server socket with Python
- Socket Programming in Python (Guide)
- Python 字符串前面加u,r,b,f的含义
- Python socket 实现进程间通信
- Python Socket实现心跳监测
- python之struct详解
- struct
- python socket编程(传输字符、文件、图片)
- Python3 网络编程
这里还是强推 Boost.Asio
【对齐问题】
- Python使用struct处理二进制(pack和unpack用法),翻译自官方文档->struct — Interpret bytes as packed binary data
- 大端、小端和内存对齐问题
串口通讯
- ROS下串口通讯github源码
- 利用socat和cutecom实现Linux虚拟串口通信
- 如何分辨串口,Ubuntu下的CuteCom串口详细调试教程
- ASCII码与16进制转换对照表
- C++中int与string的相互转换
如果要剔除开头或结尾的几个字符可以先利用初始化,然后再利用stoi
std::string s(data,1);
data=std::stoi(s,0,0);
python编程小技巧
python比较菜,因此记录一些编程中遇到的问题。
- Python程序退出: os._exit()和sys.exit()
- try except Exception as e 检查异常
- Python try except else finally的执行过程
- python内置函数之staticmethod() 函数
- python-socket-服务端一对多客户端断线自动重连,自动收发消息示例
- Python list中选择满足某种条件的数据操作
- Python列表(list)
- python list 查找与过滤方法整合
- Python使用struct模块进行文件传输
- C++和python使用struct传输二进制数据结构来实现
- Python使用struct处理二进制
- python编写串口通信
- Python Qt