玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

本文介绍X-CTR100控制器与树莓派Linux系统组成机器人平台。首先介绍与树莓派串口通信,后介绍机器人平台搭建。这种上下位机平台架构常用于机器人ROS系统开发中。最后介绍了Linux机器人开发中常用的软件工具,意在抛砖引玉。

环境搭建

本文使用树莓派硬件版本为3B+,GPIO扩展接口具有1路串口,可以与X-CTR100控制器通信。

组成强大的上下位机机器人系统,这个是主流的ROS架构。GPIO的串口引脚定义如下。

软件操作系统使用NOOBS安装,NOOBS版本2.8.2,2018-06-27更新。

安装树莓派官方Raspbian Stretch版本

默认状态树莓派串口是关闭的,需要打开串口,并关闭串口终端,如下。如果未关闭串口终端,改串口会打印系统调试信息。

输入以下命令,查看串口状态。ttyS0为我们要使用的扩展接口上的串口。

ls -l /dev

此时,无须像网上教程所述修改任何配置映射文件,即可使用ttyS0通信。

树莓派与PC机串口通信测试

首先测试树莓派例串口通信是否正常,测试采用树莓派与PC机串口通信。硬件平台如下。

本文使用一款图像化的Linux串口工具cutecom,当然也可以常用的minicom或picocom。

后两者在Linux中使用较多,但是为文本工具,上手有难度。

cutecom软件通信

cutecom安装非常简单使用apt-get命令,如下。

sudo apt-get install cutecom

安装完成后,输入如下命令打开软件。串口操作需要root权限。

sudo cutecom

设置串口设备为/dev/ttyS0,并打开设备,可以实现串口数据收发。

minicom软件通信

minicom软件安装前注意更新软件源,通常使用命令安装软件apt-get install。

sudo apt-get install minicom

也可以使用图形化的方式安装一款软件:串口调试工具minicom。使用系统自带的 "Add /Remove Software"软件。

打开终端,如下命令打开ttyS0串口。

sudo minicom –b 115200 –o –D /dev/ttyS0

软件界面如下,为文本界面。

树莓派键盘输入字符即可传输到PC机,PC机发送字符到树莓派。

如果参数固定,也可使用如下命令,配置minicom,后续启动均按照该配置启动。

sudo minicom –s

进入配置界面,选"Serial port setup"进行串口设置。按下图设置,重点A选型串口名称。

然后进入配置界面,选择"Save setup as dfl"保存配置,并选择"Exit"退出。

后续输入如下命令,即可按照配置内容打开串口。

sudo minicom

退出minicom方法,根据提示按CTRL+A,进入help界面,按X退出。按Z查看帮助。

打开软件时,如果出现如下提示,可通过进入/var/lock文件夹,删除"LCK..ttyS0"解决。该情况一般为错误关闭串口导致。

Device /dev/ttyS0 is locked.

树莓派与X-CTR100串口通信测试

硬件连接

本例程测试树莓派与X-CTR100串口通信是否正常,硬件平台如下,树莓派连接UART1。

测试例程

X-CTR100控制器下载《X-CTR100 l 树莓派串口通信例程(循环发送)》例程,X-CTR100会每隔1S发送一次串口数据。树莓派使用minicom接收,测试结果如下。

树莓派与X-CTR100 python串口通信

minicom仅满足调试用途,用于制作还需要编程解决,树莓派流行的编程语言为python语言,介绍如何使用python编写串口通信代码,使用python的serial扩展库——pyserial实现。

硬件连接

本例程测试树莓派与X-CTR100 python串口通信功能。此例程树莓派串口连接UART3(LB接口)。

pyserial安装

安装pyserial扩展库有很多种方法,可使用pip或者easy_install安装,也可以直接选择apt-get工具安装。若使用apt-get工具安装,可输入以下指令

sudo apt-get install python-serial

python代码

代码实现树莓派循环向X-CTR100控制器发送数据功能。

# -*- coding: utf-8 -*

import serial

import time

# 打开串口

ser = serial.Serial("/dev/ttyS0", 9600,timeout =0.5)

# 循环发送

while 1:

ser.write('Hello X-CTR100\r\n'.encode())

time.sleep(1)

#关闭串口

ser.close()

测试例程

X-CTR100控制器下载《X-CTR100 l 树莓派串口通信例程(接收数据)》例程。例程实现UART3接收树莓派发送的数据,并通过USB串口显示数据内容,当接收到'\n'符后,反转LED灯指示状态。主程序及UART3中断接收部分代码如下。

int main(void)

{

    /* X-CTR100初始化 */

    AX_Init(115200);

 

    printf("***X-CTR100 接收树莓派串口数据测试例程***\r\n");

 

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组

 

    AX_UART_Init();

 

    while (1)

    {

        AX_Delayms(1000); //延时100ms

    }

}

 

/**

* @简 述 串口中断服务程序

* @参 数 无

* @返回值 无

*/

void USART3_IRQHandler(void)

{

    uint8_t Res;

 

    if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断

    {

 

        Res = USART_ReceiveData(USART3);

 

        //USB串口显示接收到的字符

        printf("%c", Res);

 

        //接收到换行符,反转绿色LED

        if (Res == '\n')

            AX_LEDG_Toggle();

 

        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

    }

}

X-CTR100控制器下载代码后,打开串口调试助手。在树莓派使用默认IDE运行python代码。运行结果下图所示。

树莓派X-CTR100机器人平台搭建

目前的测试平台,只实现了树莓派与X-CTR100控制器上下位机串口通信功能。树莓派需要连接键盘鼠标和显示器,并且需要USB单独供电,不方便搭建机器人平台。

要构建机器人平台还需要解决供电和远程操作两个问题。

供电

X-CTR100使用VIN输入时,其内置DCDC具有5V@2A供电输出能力,可以向树莓派提供稳定5V电源,解决电源输入问题。

远程控制

供电解决了,鼠标键盘显示器还依然存在,如果需要摆脱,就需要通过网络进行远程控制。

本文介绍两种远程操作方式,一种文字方式SSH,一种图像方式VNC。

SSH方式,这也是Linux常用操作方式,适合高手,需要记录大量命令,操作高效便捷,但是难度大。对于小白,操作起来可能会比较困难。另一种VNC远程控制方式,在PC机上使用远程控制操作树莓派桌面。下面分别介绍。

SSH方式

SSH为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。系统框图如下。

Windows系统运行SSH有两个常用软件,putty和SSH Secure Shell Client。本文已putty为例说明。

PC机下载安装puttyPC机和树莓派在一个网段内,如下方式连接树莓派。

连接后即可通过命令方式控制树莓派,一般Linux操作大多通过命令方式进行,界面如下。

在SSH模式下,也可以使用minicom软件,进行远程串口调试,非常方便。

VNC方式

对于小白用户SSH方式可能有些困难,使用VNC方式,可以通过远程桌面,就像操作自己电脑一样操作树莓派图像桌面,使用非常方便。借助WIFI无线网络,更可实现无线控制,对于机器人操作调试非常方便。

VNC (Virtual Network Console)是虚拟网络控制台的缩写。它是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。

树莓派自带VNC软件,默认关闭,需要通过配置选项开启。

如果使用PC机,需要安装VNC Viewer软件。添加树莓派IP地址,账号密码,即可使用,非常简单。

注意,树莓派默认分辨率设置为根据显示设备自适应,如果不插显示设备,分辨率会比较低。为了达到较好效果,建议将树莓派分辨率调节至1080P,如下设置。

硬件平台

X-CTR100控制器可以方便与树莓派组装在一起,组成性能强大的Linux机器人开发平台。组装后,X-CTR100和树莓派接口均可以正常使用,例如下图所示电机驱动也可以正常使用,最多可驱动四路直流电机。只需要为平台供电即可开发,连接非常简单,适合ROS机器人系统开发。

ROS机器人系统

有了机器人硬件平台,实现机器人还需要软件平台,下面介绍机器人常用软件。

ROS(Robot Operating System,下文简称"ROS")是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。

ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是"节点")框架,这些进程被封装在易于被分享和发布的程序包和功能包中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。

使用ROS,可以方便开发现在较为流行的SLAM机器人。

具体树莓派ROS系统的安装和使用,网络上有大量文章,请搜索参考,本文不做详见介绍。

OpenCV机器视觉

OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV是开发机器人视觉不可缺少的工具,可以方便进行图像处理操作,例如机器人常用的物体检测,人脸跟踪等功能。这里不做过多描述,感兴趣可以搜索安装。

TensorFlow人工智能

TensorFlow 是谷歌研发的第二代人工智能学习系统,可被用于语音识别或图像识别等多项机器学习和深度学习领域。今天,TensorFlow 官方宣称开始支持树莓派平台,这意味着树莓派设备在人工智能方向的应用和学习上变得更加容易。

TensorFlow 在 2015 年首次发布之时,我们希望它成为一个任何人都可以使用的开源的机器学习框架。为此,我们将它扩展到了 Linux、MacOS、Windows、iOS 以及 Android 平台。而今,在树莓派基金会的协力下,我们宣布最新的 TensorFlow 1.9 版本将可以通过树莓派预装的 Python pip 包系统安装!如果你使用的是 Raspbian 9 (stretch),你可以在终端运行下面的命令进行安装:

sudo apt install libatlas-base-dev

pip3 install tensorflow

然后在终端运行 python3,像在其他平台使用 TensorFlow 一样使用它就好了。下面是一个 hello world 的例子。

# Python

import tensorflow as tf

tf.enable_eager_execution()

hello = tf.constant('Hello, TensorFlow!')

print(hello)

参考

http://shumeipai.nxez.com/2018/08/03/tensorflow-officially-supports-the-raspberry-pi.html

posted @ 2018-09-06 14:22  xtarker  阅读(1646)  评论(0编辑  收藏  举报