查看: 11721|回复: 56

[项目] 用Arduino制作支持ROS机器人操作系统的7轴机械臂

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

    [LV.2]偶尔看看I

    发表于 2019-3-26 23:26 | 显示全部楼层 |阅读模式
    参赛项目

    用Arduino制作支持ROS机器人操作系统的7轴机械臂

    参赛组员
    190808149
    人数:1名


    项目演示:

    我使用Arduino和PCA9685来驱动舵机;并借用Lego Tech乐高孔条零件快速拼装机械臂;在Linux系统和ROS MoveIt机器人运动规划软件下,通过鼠标操作,自由拖动解算机械臂关节姿态。


    两年前Arduino论坛发放给我MakeBlock MegaPi,所以一直比较关心MakeBlock 的发展。MakeBlock 现在已经在苹果商店上线Swift关联产品了。这样的商业成就真是值得兴奋和鼓舞。非常感慨正规的商业化运作让创客产品在公司机制的保障下演化和推进,比创客个人凭借兴趣进行尝试更有可行性和连续性。同样,两年前在论坛开展竞赛的uArm出品商UFACTORY最近上市的xArm技惊四座,已经开始在KickStarter上销售。这样的产品迭代能力真的很了不起。xArm的各项能力我们目前用Arduino和航模舵机等常用硬件是无法达到了。不过xArm能够结合ROS机器人操作系统使用,在Linux系统下使用图形用户界面模拟、实时控制机器人的操作,倒是我们用Arduino可以办到的。

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

    01.jpg


    舵机和孔条的打印连接件的设计图纸在
    游客,如果您要查看本帖隐藏内容请回复

    连接件使用9g舵机配备的螺钉连接,然后用Lego插销固定孔条连接件。即可完成拼装。

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


    02.jpg


    机器人原型在Solidworks中也可以用零件进行及时装配调整,然后直接输出到机器人操作系统ROS,验证机器人的合理性。在计算机上验证合理后再组装真实的机械臂。实现了计算机辅助设计应有之意。通过原型设计,不端扩展,最终我们得到以下7轴机械臂:


    IMG_20190326_101637.jpg

    机械臂舵机连接Arduino和PCA9685驱动板后,即可结合ROS机器人操作系统展开调试。



    以下是操作指引:

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


    03.png


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

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

    注意,在连接电脑,PCA9685和Arduino2560前,先确保Arduino程序逻辑调试通过,再给PCA9685独立供电,推动舵机。我在制作过程中,程序逻辑还未完善就加电调试舵机,机械臂乱动,损坏了拼接好的机械臂。只有重拼。

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

    04.png



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

    05.png



    06.png



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


    u8.png


    选择Export输出urdf文件
    u9.png


    solidworks插件自动计算机器人轴向位置和关节坐标
    保存urdf文件

    u10.png

    得到的urdf文件目录如下

    u11.png



    u12.png



    打开装有ROS的Ubuntu Linux虚拟机将urdf文件
    拖动拷贝到Linux虚拟机catkin_ws/src/文件目录。
    u13.png


    在linux中找到urdf位置
    r1.png




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


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


    r03.png



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


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


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


    r01.png


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


    首先,我们根据前面的2轴(关节)机械臂,扩展舵机数量得到7轴(关节)机械臂。
    IMG_20190326_101627.jpg


    Arduino自带的servo.h库只能驱动2个舵机。要同时驱动7个关节舵机,需要使用Adafruit PCA9685驱动板。该配件价格不贵,淘宝价10元。



    IMG_20190326_101651.jpg

    将舵机分别连接到PCA9685舵机口0-6,连接供电。连接PCA9685的5V,GND到Arduino相应位置,SDA到Arduino A4,SLC到Arduino A5。再烧录代码
    游客,如果您要查看本帖隐藏内容请回复


    IMG_20190326_101703.jpg

    游客,如果您要查看本帖隐藏内容请回复



    本项目使用的其他代码也在https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS

    先我们配置机械臂和ROS运动规划功能相关节点

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

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


    运行命令roslaunch moveit_setup_assistant setup_assistant.launch
    打开moveit配置界面,为机械臂配置运动规划功能
    m1.png


    把关节相邻部分碰撞检测关闭
    m2.png


    配置机械臂关节组,设置IK动力学插件,以便在软件中对关节姿态进行实时反向解算
    m3.png

    m4.png


    设置几个常用的机器人关节姿态
    m5.png


    设置ros_control接口
    m6.png


    最后生成MoveIt运动规划节点
    m7.png


    就可以在计算机上通过GUI图形用户界面实时设定和规划7轴机械臂的运动了。
    m8.png

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

    演示视频:

    直接通过鼠标拖动机械臂指定机械臂目标位置,ROS MoveIt通过IK反向动力学插件及时求解所需的关节变动参数,传递给Arduino,指挥舵机作相应旋转,机械臂即可运动到达相应位置。










  • TA的每日心情
    无聊
    2019-9-3 11:40
  • 签到天数: 53 天

    [LV.5]常住居民I

    发表于 2019-3-27 09:19 | 显示全部楼层
    windowns下没有类似的软件能直接控制吗?
    一定要在linux下做?
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-3-29 11:47 来自手机 | 显示全部楼层
    本帖最后由 190808149 于 2019-3-29 23:48 编辑

    暂时不行,机器人技术的相关软件多是围绕Linux开源生态构建的。
  • TA的每日心情
    慵懒
    2019-2-11 19:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-3-30 19:24 | 显示全部楼层
    您好,我想添加您学习一下,这个真的很厉害啊,尤其是机器人动作规划软件,很帅啊,是什么软件呢
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-4-2 23:24 来自手机 | 显示全部楼层
    本帖最后由 190808149 于 2019-4-2 23:26 编辑

    用的ROS MoveIt. 在这里下载安装:moveit.ros.org
  • TA的每日心情
    擦汗
    2019-1-26 16:31
  • 签到天数: 446 天

    [LV.9]以坛为家II

    发表于 2019-4-7 23:17 | 显示全部楼层
    比赛积分已发,感谢对社区比赛的支持~

    该用户从未签到

    发表于 2019-4-15 11:04 | 显示全部楼层
    楼主,视频中你在moveit规划完运动轨迹后,手拨了个 什么 开关吗?

    该用户从未签到

    发表于 2019-4-15 11:08 | 显示全部楼层
    本帖最后由 Sit二呆 于 2019-4-22 10:12 编辑

    楼主,这是我在调试时的rqt_graph,看起来一切运行正常,如图1./joint_state_publisher发布/joint_states,并由/serial_node订阅并下发运动数据position,七轴的模型舵机不动,二轴的模型舵机可以动...
    2.使用moveit做了运动规划后,舵机不动,提示:Executed completed: ABORTED
    ...这可能是什么原因引起的?您遇到过类似的情况吗
    0321_rqt_graph.png
    my_robot_rqtgraph.png

    该用户从未签到

    发表于 2019-4-15 11:21 | 显示全部楼层
    初学者,谢谢大侠
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    <ESP8266NodeMCU>网络连接问题
    <ESP8266NodeMCU>网络连接
    在我家的WiFi可以连上,但在学校里无论是WiFi还是手机热点就是连不上。 想让各位康
    基于机器视觉的智能分拣机械臂
    基于机器视觉的智能分拣机
    本作品是一个基于机器视觉的智能机械臂操作平台,其采用atmega32单片机作为主控制系统
    晒图ESP8266一个框架
    晒图ESP8266一个框架
    好久没发帖了,出来活跃活跃一下。ESP8266免身份登录截图。 最近外研究新的架构M2M或P
    blinker做的卧室灯开关发现一个问题
    blinker做的卧室灯开关发
    做了一个卧室灯开关并安装到墙壁86盒中,实现了小爱同学,墙壁开关点动控制开关灯.看起
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表