查看: 689|回复: 0

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

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

    [LV.2]偶尔看看I

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

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

    两年前Arduino论坛发放给我MakeBlock MegaPi,所以一直比较关心MakeBlock 的发展。MakeBlock 现在已经在苹果商店上线Swift关联产品了。这样的商业成就真是值得兴奋和鼓舞。非常感慨正规的商业化运作让创客产品在公司机制的保障下演化和推进,比创客个人凭借兴趣进行尝试更有可行性和连续性。

    与MakeBlock同样由柴火空间孵化,两年前出品uArm的UFACTORY最近上市的xArm技惊四座,已经开始在KickStart上销售。这样的产品迭代能力真的很了不起。xArm的各项能力我们目前用Arduino和航模舵机等常用硬件是无法达到了。不过xArm能够结合ROS机器人操作系统使用,在Linux系统下使用图形用户界面模拟、实时控制机器人的操作,倒是我们用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机械臂的最好方法。






    打赏
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    Blinker 模拟传感器+数字传感器例程(DHT11 温湿度+气体传感)
    Blinker 模拟传感器+数字
    才接触1星期,发现Blinker自带了很多例程,已经成功试验了DHT的例程序,并完善了体
    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    [发布帖]RPG游戏 无人世界
    [发布帖]RPG游戏 无人世界
    视频攻略:https://www.bilibili.com/video/av43790997/ (b站正在审核) 剧情:主角是
    【人脸识别】ESP-EYE 最新的板子到货了
    【人脸识别】ESP-EYE 最新
    1.我不会编程,最多抄几个一步一步的网络教程。 2.不知道为啥就是超级喜欢电子元件。
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表