查看: 2698|回复: 10

Arduino2560/MegaPi与ROS机器人操作系统的连接

[复制链接]
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2018-11-21 14:45 | 显示全部楼层 |阅读模式
    本帖最后由 190808149 于 2019-4-3 10:58 编辑

    该帖子讲述了ROS和Arduino连接,控制2轴舵机机械臂的内容。现已经根据该原型系统,扩展到7轴机械臂:


    用Arduino制作支持ROS机器人操作系统的7轴机械臂
    https://www.arduino.cn/thread-85107-1-1.html
    ----

    大家好,我因为需要更多时间维系琐碎平凡的工作和生活,一段时间没有上Arduino论坛。现在能重新抽出些时间逐渐回到开源硬件技术的学习和实验中,真的非常感谢亲人的支持。

    在Ubuntu Linux ROS软件的支持下,我们可以应用Arduino和舵机组装的简易机器人实现图像识别、运动规划甚至强化学习等知识。我使用以Arduino 2560为核心的MakeBlock MegaPi来驱动舵机;并借用Lego Tech乐高孔条零件快速拼装机械臂;与Ubuntu Linux ROS互动操作。达到学习目的。


    1542775590632.jpg

    舵机和孔条的打印连接件的设计图纸在https://github.com/qq95538/ServoTurnAround/SolidWorkFiles/
    连接件使用9g舵机配备的螺钉连接,然后用Lego插销固定孔条连接件。即可完成拼装。

    这样做自由度高,模块性好,制作机器人,机械臂无需用3D打印机打印整个机器人。只需借助Lego孔条作为骨骼,快速搭建机器人原型。
    1542783134170.jpg

    另外,机器人原型在Solidworks中也可以用零件进行及时装配调整,然后直接输出到机器人操作系统ROS,验证机器人的合理性。在计算机上验证合理后再组装真实的机械臂。实现了计算机辅助设计应有之意。


    以下是操作指引:

    1.Windows上安装VMWare,下载Ubuntu16.04 LTS操作系统光盘镜像,在VMWare上创建一个Linux系统虚拟机。安装完毕后在Ubuntu Linux上安装ROS,选完全安装。运行roscore节点。


    instruction07.png

    2.在Arduino Sketch上安装rosserial库。确保上网通常,在第三项菜单Sketch中选Include Libraries,点击进入Manage Libraries直接搜索添加rosserial库。

    3.下载github下载sketch程序ServoControledByROS烧录到Arduino 2560或MegaPi,Pin6连接舵机数字端口。点击通过VMWare右下角图标将Arduino 2560串口连接虚拟化到Linux虚拟机内。Linux识别出串口ttyUSB__之类的串口。在Linux命令行中继续执行rosrun rosserial_python serial_node.py /dev/ttyUSB__将一个ROS节点与Arduino连接。就能在Linux下让ROS操作Arduino舵机或机械臂了。

    注意,在连接电脑和Arduino2560/MegaPi前,先确保Arduino供电,再用USB连接电脑。让MegaPi确认9V端口供电。如果先连接USB再接9V端口,则MegaPi选择以USB口供电,无力推动大功率舵机,电压下降,MegaPi掉电重启。

    4.下载SolidWorks下的urdf制作插件,绘制自己设计的机械臂零件,制作装配图。

    00

    00


    通过urdf插件指定机械臂链接和轴。

    01

    01


    instruction01dian5.png

    instruction01dian7.png

    instruction02.png

    选择Export输出urdf文件
    instruction03.png

    solidworks插件自动计算机器人轴向位置和关节坐标
    instruction04.png

    保存urdf文件
    instruction05.png

    计算出的轴位置在Solidworks中虚线示意




    得到的urdf文件目录如下
    instruction06.png

    打开装有ROS的Ubuntu Linux虚拟机将urdf文件
    拖动拷贝到Linux虚拟机catkin_ws/src/文件目录。
    instruction08.png
    在linux中找到urdf位置
    instruction09.png

    编辑package.xml信息,注明自己的版权信息和邮箱
    instruction08dian5.png

    借用现成的urdf_tutorial 定义,运行命令roslaunch urdf_tutorial display.launch model:=文件所在位置.urdf。在RViz中机械臂的CAD三维示意图就显示出来了。


    10

    10


    操作joint_state_publisher控制关节舵机运动。rviz中的机械臂模型就动起来了。
    instruction11.png

    Arduino通过rosserial收到joint_state_publisher发出的topic信号,

    12

    12


    和Rviz中虚拟的机械臂模型一起也做同步运动





    在Rviz中配置好机械臂模型后,就可以通过ROS Moveit软件,在计算机GUI图形界面下配置和规划机械臂运动路径了。

    所有代码在https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS

    1、首先,根据之前产生的机械臂模型https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/0320_all_assembly  
    配置一个ros_control节点:https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/myrobot_control,控制机械臂的运动。

    2、同时根据刚才所述的机械臂模型https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/0320_all_assembly
    配置一个ros moveit节点:https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/0320_config

    3、配置节点后依次运行命令:
    中心节点
    roscore
    机械臂控制节点
    roslaunch myrobot_control myrobot_joint_trajectory_controllers.launch
    运动规划节点
    roslaunch 0320_config demo.launch
    触发Moveit和RViz图形用户界面,即可通过Moveit规划机器人运动路径。

    -------------
    PS:
    现在MakeBlock 产品的使用编程全面图形化和智能化,更能使用Swift在苹果电脑上编写。降低了学习难度,还提高开发效率。而我仍然使用传统的Arduino Sketch烧录MegaPi。并不值得推荐。

    我仅把MakeBlock作为带有舵机扩展卡的Arduino2560使用。使用过程不需要安装调用Makeblock-Libraries。另外,Arduino在互动性上,通过USB有线连接电脑和Arduino,操作机械臂的方法也老旧和不便。不值得推荐。
    我们论坛的Blink项目已经能与手机、电脑甚至云系统链接互动。
    github上也给出了ROS通过WiFi网络直连8266模块Arduino的示例程序,这才是电脑操作Arduino机械臂的最好方法。







    打赏

    1人打赏

  • TA的每日心情
    开心
    2019-3-26 09:01
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2019-3-1 20:04 | 显示全部楼层
    能够用arduino操作类似UR一类的机械臂吗
  • TA的每日心情
    郁闷
    2019-5-17 22:51
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-3-5 09:14 | 显示全部楼层
    大神级的,虽然有好多东西看不懂,

    该用户从未签到

    发表于 2019-3-18 16:16 | 显示全部楼层
    本帖最后由 Sit二呆 于 2019-3-19 11:20 编辑

    感谢楼猪分享!
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-3-20 01:06 | 显示全部楼层

    谢谢了,太客气,不用打赏。下次你发帖,我也给你打赏捧场。

    技术上有什么问题请直接回帖。我会尽力解答的。不要加我QQ,麻烦了。
    打赏
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-3-20 01:46 | 显示全部楼层

    不像Arduino的简单可靠,ROS和Linux作为开源系统,在驱动和兼容性上,特别复杂。不好调试。我这帖子开了半年了,现在还没太多进展。有问题大家互相直接回帖交流。
    打赏

    该用户从未签到

    发表于 2019-3-22 14:23 | 显示全部楼层
    本帖最后由 Sit二呆 于 2019-3-22 14:33 编辑

    感谢回答!向您再请教几个问题:1.在运行display.launch,机械臂可以像视频一样运作。但在运行中心节点、运动控制节点以及demo.launch节点时,点击plan,求解成功率不高、速度慢,之后点击excute时,机械臂不动(这是什么原因...)

    该用户从未签到

    发表于 2019-3-22 14:37 | 显示全部楼层
    本帖最后由 Sit二呆 于 2019-3-22 14:44 编辑
    190808149 发表于 2019-3-20 01:46
    不像Arduino的简单可靠,ROS和Linux作为开源系统,在驱动和兼容性上,特别复杂。不好调试。我这帖子开了 ...

    2.如果想借助MoveIt去控制基于windows开发的机械臂,需要做哪些工作,可行性如何,以及rosserial_windows对这个方案可有帮助?3ks
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-3-25 11:28 | 显示全部楼层
    微软在开发基于Windows的ROS版本,已经可以使用了。但是MOVEIT不兼容Windows版本的ROS。
    MOVEI推荐使用ubuntu16.04和ROS Kinetic。
    ubuntu18和Melodic安装后无法直接运行RViz,应该有些组件需要自己编译。Windows版本的ROS上运行MOVEIT应该也要自己编译组件。我也刚入门,不敢乱动。
    控制节点是根据ros_control编程框架自己定制的,根据自己手上机器人的实际情况自己编写驱动电机代码。
    MoveIt运动规划在RViz图形化界面上实现,ros_control接收来自Moveit的运动规划指令,驱动机器人全身电机转动。然后返回关节运动状态到Moveit,MoveIt按下Execute按键不动,是因为Moveit没有收到ros_control传回的关节状态通知。
    可以先将demo.launch文件中含有fake字样的一行配置文件由 =“false”改为 = “true”就能看到RViz中的机械臂的模拟执行动作了。
    之后再调试ros_control的电机控制代码,实现真实的电机控制,并通过publish the topic of /joint_states回传传关节状态到ros系统。改回fake一行为="false"。这时执行demo.launch就可以看到RViz显示ros_control中返回的真实的机器人状态了。
    帖子中只示意了两个关节的控制,具有实际操作意义的多关节机器人运动规划我也还在弄,流程也还没跑通。我的RViz运动规划求解过程也确实挺慢的。根据机器人关节距离和运动范围的不动,如果plan的位置不合理,Moveit和RViz程序甚至直接crush。
    另外,我的帖子是完全根据Moveit Tutorial建议来做的。跑通花了太多精力。
    其实百度搜索查看普及ROS的博主古月居的文档,他跳过ros_control框架,直接写一个Action Server,连接MoveIt提供的Trajectory Action Client执行路径规划命令,编程实现起来还方便些。
    打赏

    该用户从未签到

    发表于 2019-3-29 17:13 | 显示全部楼层
    190808149 发表于 2019-3-25 11:28
    微软在开发基于Windows的ROS版本,已经可以使用了。但是MOVEIT不兼容Windows版本的ROS。
    MOVEI推荐使用ubun ...

    感谢楼主慷慨分享经验,坑趟过,方知深浅。望楼主常回来看看,并更新帖子 哈哈
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    ArduinoJason6教程由ArduinoJson作者Benoit亲自出马一对一教学
    ArduinoJason6教程由Ardui
    这几天我觉得社区教学好像缺了点什么,呃呃~我想一想好像是缺少了ArduinoJson6的教学
    Arduino+L298N小车实例教程
    Arduino+L298N小车实例教
    (第一次写教程,如有错漏,敬请拍砖)Arduino+L298N小车实例教程Arduino小车是一个非
    零知开源分享-蓝牙模块与手机APP通信
    零知开源分享-蓝牙模块与
    本篇文章中将讲解蓝牙模块与安卓手机APP进行通信。1、说明MCU:零知开发板-标准板模
    DHT库无法被找到
    DHT库无法被找到
    今天在安装了DHT库之后在编译时却显示无法找到库,请问我是在哪里安装出错了,谢谢大
    (可远程)ESP8266读DHT11温湿度,APP inventor制作app实时显示
    (可远程)ESP8266读DHT11
    原理讲解 原理简述:利用发布订阅模式。第一步,先读取DHT11温湿度数值,第二步,新
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表