目录
一,实物or仿真
我想这个问题是在开发之前最容易想清楚的,所以我先说!
1,实物或仿真的利弊
对于做出实物,要比仿真耗费更多的时间,精力,物力,财力。
接触过硬件的朋友都会有体会,首先你会考虑性能价格等方面的因素去选择一款合适的硬件,然后你需要花时间去学会使用调试它,最头疼的是你调试的过程中会遇到很多只有你才会遇到的问题,像硬件烧坏,电气连接不稳定对初学者来说是最常见的问题,还有可能你用着用着发现不合适了,对不起,需要把上述过程再过一遍,这都需要时间和精力。关于物力,财力问题,我就举个例子来说,最早诞生于斯坦福大学PR1机器人,现在迭代到PR2,价值100多万,这不是一般科研单位能用的起的,说一个入门级的科研平台Turtlebot,二代标配也是几万块,就算是自己搭建,激光雷达,深度相机,机械臂这些都要上千,移动底盘可以自己搭,电机,里程计,电源,驱动这些自己可都做不出来,我目前了解到一款较便宜的桌面级的机械臂turtlebot-arm(PhantomX-Arm)也要几千,当然也可以自己画图买控制驱动舵机完完全全自己做,如果不是个团队或者懂点机械也不建议弄,结构不好,精度不够,参数不明确也没法用。
那也不是一无是处,做实物最大魅力正在于它的“麻烦”,很多人去玩这些是出于兴趣的,看到自己做的机械臂动了起来,自己做的底盘跑了起来,每解决一个问题,都可以通过这些实物展现出来,这种成就感是仿真给不了的。其次做仿真最终是要落地为实物的,当然这不一定是你做,这种锻炼是以后走向科研单位或是研发岗位的一种很好的积累。
仿真我就说一句话,它有自己天然的好处,理想环境里模拟再多干扰它始终不是真实环境。
2,从哪些角度去考虑是选择实物还是仿真
我挑重点说,综合考虑需求,能力,条件。
比如说,你没经费,又在这方面动起手来不擅长,也没必要锻炼,实验室条件也差劲,别考虑做实物了。又比如说,你要做出实物参加竞赛,做出产品,有这样的需求你就没有选择。仿真可以节省一部分麻烦,这样你可以节省精力放在算法,策略上,有重点的学习自己需要深入的地方。
我的需求是做本科毕业设计的,所以我的定位是学习使用为主,实物次之,改进算法为更高追求。无论是做实物还是侧重仿真,这两方面我都会分享自己学习过程中的心得。
二,环境准备
1,首推ROS
ROS(robot operating system),顾名思义,机器人操作系统,首先,专业,开源,具有很好机器人开发交流生态,机器人明星大都是基于ROS。ros的初衷是提高软件的复用率的,具体的发展历史,特点,优缺点自行查阅。
放些图吧,不然显得太枯燥。
这个是ROS的特点:
(图片来自古月老师课件,顺便说一下,胡老师在国内ROS教育的影响力对于学习ros的人,几乎没有不知道古月老师的)
2,其他环境
没有(有也不推荐,我也不会)。
三,理论学习
关于ROS的学习,ROS1依赖在ubuntu系统下,因此你需要一个linux系统,不建议使用虚拟机,虚拟机安装容易,使用起来问题较多,所以建议WIN+linux双系统。ros2据说可以在Windows下使用。
安装系统之前,你要搞明白几个事情,Ubuntu版本与ROS版本之间的对应关系
最新(2021年)ROS1发行版本适用的Linux操作系统平台、语言工具要求、第三方库支持、版本推荐
对于初学者来说,建议较早的indigo或kinetic(我当时用的indigo,不过现在都2021年了,用新的吧),较早版本大家分享资料比较多,功能包安装方便
还有安装系统的时候,关于内存分配,最好自己找好教程,或者身边找个懂得,别把自己win系统搞崩了,别问我怎么知道的,经验之谈
我不是搞教学的,我是记录自己学习心得的,自己去购买古月老师的课程就好了,花钱买的才会珍惜学习。
逢场作戏,我也分享一个ros学习博客:
https://blog.csdn.net/weixin_40038847/article/details/82020565
课件:ROS机器人操作系统基础教程
https://download.csdn.net/download/qq_37372155/12087535
下面是古月老师的推荐:
四,实物搭建
我一直强调需求和能力的问题,所以实物搭建也是一样的,前面说了,实物不是我的重点,得益于我指导老师的帮助,给我了一个turtlebot2学习平台,有kuboki底盘,有kinnet深度相机,底盘用来移动,相机用来建图和识别,要想抓取,肯定还缺个机械臂,我们身边没有搞机械的同学,这次只有自己这个学控制的自己动手了(我没钱)。
1、深度相机or激光雷达
价格上激光雷达较深度相机贵,但适应性和图像质量比深度相机好点,深度相机做平面的slam有点大材小用了,在ROS里面的建图功能包是只是选取深度图像的一个切面,当然深度相机一般还可以提供常规的彩色图像,这里可以结合传统的图像处理,还有做抓取最好用到深度图像,从深度信息层面上去识别物体,包括位置和姿态,知道了位置和姿态,然后对机械臂进行逆运动学规划。(我只有kinect,没得选)
2、自己做条机械臂
不建议先做这部分,可以先把slam玩够了,再说这个
首先知道需要什么,要想知道需要什么,看看ROS提供什么,这里不是本篇文章的重点,所以我就直接说,ROS里面有个/joint_states话题,实时提供机械臂各关节弧度值,以及速度、加速度等信息,据此我们可以通过订阅这个话题,把弧度值转化为你所需要的控制信号,我这里用的是数字舵机,因此需要把弧度转化为PWM给到舵机。
好,ros这边提供的东西有了,那你应该也就清楚机械臂这个执行单元需要什么了,首先上位机把PWM信号给到机械臂,需要通信协议,哎,这样说也不是很清楚,直接上图
我做的已经看到了,我说下还可以怎样改进
1、Arduino控制板可以省略,上网本直接用IIC和驱动板通信,由于上网本没有现成的通信例程可以用,而Arduino有,因此加了一块Arduino UNO
2、机械臂结构的选择,大都6自由度,连杆长度,关节绕哪个轴运动参考UR,ABB,KUKA这些大明星就好了,好的结构对后面运动规划影响很大,经验之谈
3、舵机的选择,不同位置可以考虑不同扭矩的,但这样也带来一个问题,不同扭矩的舵机需要的电压也不一定一样。另外推荐使用UART舵机,控制上面可以省点功夫,还有舵机最好有角度反馈,做控制的人最喜欢有反馈了。
4、连杆,我更愿意称它为舵机连接件,有条件的用3D打印机打印吧,随心所欲,够轻,够结实就好。要求不高的不想打印去某宝几百块钱买个便宜的不支持ROS那种改装一下也OK的。
我本身也在学习阶段,说的比较主观和局限,正规的教学去看古月老师的课程吧。
这篇文章也是自己第一次写,废话较多,主要在于分享心得,接下来的分享将从程序层面上来说。
完整代码github托管地址:https://github.com/pengxinyi-up/mobile-grab-Robot
【系列文章】
【实战+源码】基于RGB-D(深度视觉)的具有机械臂抓取功能的自主规划移动服务机器人的设计与实现(一)——准备工作
实战+源码】基于RGB-D(深度视觉)的具有机械臂抓取功能的自主规划移动服务机器人的设计与实现(二)——人脸识别(face recongnition))
【实战+源码】RGB-D移动抓取服务机器人(三)——3D目标识别定位(相机标定、ORK、linemod、find_object_2d/3d)
【实战+源码】RGB-D移动抓取服务机器人(四)——完结篇(ROS机器人、系统设计、运动规划、目标定位)