【硬件】机器人平台搭建


一般来说机器人平台包括:交互界面+主站+通讯协议+从站。


通信

【CME2和RS232的使用】:

【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】:

【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

就可以开始编码了。可以参考:

看门狗:为了保证节点的稳定性,需要增加看门狗功能,就是两个节点相互监控,一旦另一个节点死了就会立即重启对方,一个节点一旦运行不正常,那么另一个节点就将其重置。

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

关于进程,主要参考了:(思路上有问题)

其他参考:


socket通讯

数据传输:使用socket通讯的方式,数据传输时要考虑到不同语言字符串转化对齐的问题

这里还是强推 Boost.Asio

【对齐问题】


串口通讯

std::string s(data,1);
data=std::stoi(s,0,0);

python编程小技巧

python比较菜,因此记录一些编程中遇到的问题。


硬件小知识

猜你喜欢

转载自blog.csdn.net/weixin_44229927/article/details/113696432