# openrobot **Repository Path**: xshadower/openrobot ## Basic Information - **Project Name**: openrobot - **Description**: 采用主从结构,以类人机器人xshadower为示例的通用开源机器人系统,非ROS,操控真实机器人,无仿真环境。 本系统采用makefile整合platformIO CLI为开发环境,整合主从代码统一管理。方便集成到jenkins等CI系统中。 主控主机在win10下python语言开发。实现对其他主机和从机的管理功能。 主控主机使用flask作为web显示,udp通信进行远程cmd控制,usb串口实现与子系统的通信。 其他主机系统通过有线或者无线网络接入主控主机,其他主机会采用jetson nano和树莓派3B。 子系统分节点和叶节点,节点和叶节点都可以通过串口直接接入主机。节点可以利用串口接叶节点,叶节点无扩展功能。 节点采用nucleo_f303re开发板,mbed os开发。实现对电机控制和叶节点的透传。 叶节点采用STM32F103C8最小系统板,ardunio开发。实现对电机的控制。 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 54 - **Forks**: 14 - **Created**: 2019-03-27 - **Last Updated**: 2025-04-16 ## Categories & Tags **Categories**: robot **Tags**: None ## README # openrobot #### 介绍 采用主从结构,以类人机器人xshadower为示例的通用开源机器人系统,非ROS,操控真实机器人,无仿真环境。 本系统采用makefile整合platformIO CLI为开发环境,整合主从代码统一管理。方便集成到jenkins等CI系统中。 主控主机在win10下python语言开发。实现对其他主机和从机的管理功能。 主控主机使用flask作为web显示,udp通信进行远程cmd控制,usb串口实现与子系统的通信。 其他主机系统通过有线或者无线网络接入主控主机,其他主机会采用jetson nano和树莓派3B。 子系统分节点和叶节点,节点和叶节点都可以通过串口直接接入主机。节点可以利用串口接叶节点,叶节点无扩展功能。 节点采用nucleo_f303re开发板,mbed os开发。实现对电机控制和叶节点的透传。 叶节点采用STM32F103C8最小系统板,ardunio开发。实现对电机的控制。 #### 软件架构 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0208/211024_766de25f_1443656.png "or-arch.png") ROS架构太过复杂且缺乏节点管理,此系统整合主控和节点,统一管理 #### 编译环境 1. 目前该系统只在windows操作系统上运行,依赖python3.6及库flask platformio pyserial,安装命令示意如下 pip install --trusted-host mirrors.aliyun.com -i http://mirrors.aliyun.com/pypi/simple/ platformio 2. 运行cmd打开命令行窗口,env 命令列出所有机器人项目 3. lunch 命令激活该机器人项目,如下图所示 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/195414_6ff6fc24_1443656.png "or-compile.PNG") 4. make xxx 命令(xxx为nodes).如下图所示 eg: make right_arm 编译名为right_arm的节点 make right_arm-clean 清除right_arm及相关编译 make clean-all清除所有编译 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/195644_1799715c_1443656.png "make-node.PNG") #### 下载到目标板 1. 连接目标板到主机。如下图所示,连接nucleo_f303re目标板到主机(基于mbed开发,可以修改配置使用其他兼容开发板) ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/201625_4879cbdd_1443656.jpeg "or-stm32-mbed.jpg") 2. 运行make xxx-burn下载对应bin文件到目标板。eg:make right_arm-burn。详见下图 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/201818_6345f227_1443656.png "burn-1.PNG") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/201828_6ac6c863_1443656.png "burn-2.PNG") 3. 串口发送程序check,程序是否正常。如图所示,会接收到很多@符号 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/201955_6c4ad298_1443656.png "monitor-1.PNG") #### 使用与控制 1. 关闭串口工具。打开cmd窗口,运行start_host.bat。此批文件会调用 ./robot/xshadower/host/manager/xshadower_manager.py脚本,此脚本会自动打开所有串口,侦测是否有@符号,如果对应串口收到@,表示此端口有可用node板,自动发送reg命令获取node板信息。如下图所示: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/202715_7944f3d1_1443656.png "detect-1.PNG") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/202727_55e93a5a_1443656.png "detect-2.PNG") 2. 打开cmd窗口,运行cmd.bat。此批文件会自动cd ./robot/xshadower/host/manager目录,运行xshadower_term.py,此工具可通过命令行发送指令控制对应node板进行对应动作。如下图所示,其中@xxx表示对应命令控制xxx节点,>为命令分割符。eg:@right_arm>REG (向right_arm发送reg命令) ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/203347_0bbab8d5_1443656.png "cmds.PNG") 3. node常用指令如下图 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0209/203543_e594ee8e_1443656.png "or-node-commands.png") - REG:注册指令,将节点信息上报给host - SEND:将指令序列传送到node的命令FIFO - RUN:运行指令FIFO的所有指令 - EXEC:立即执行对应指令 - RST:重启node - 自定义指令:MOTOR,DELAY等。采用指令加4参数的格式,中间用|隔开。eg:@right_arm>SEND DELAY|200|0|0|0(发送延时200ms指令到right_arm指令FIFO中);@right_arm>SEND MOTOR|1|180|0|0(控制right_arm的1号舵机转到180度位置) 在进行电机控制时,因为电机从一个位置运行到另一个位置需要耗费时间,再加上指令传输时间耗时会将较长,同步控制会很麻烦。这里设计指令FIFO队列可以将控制入队列,一次执行push 10条指令到队列。