1、机器人系统的构建
例:连接摄像头
$ sudo apt-get intstall ros-kinetic-usb-cam //安装摄像头功能包
$ roslaunch usb-cam usb_cam-test.launch//调用摄像头功能包打开摄像头
$ rqt_image_view//打开qt控件窗口
提示:如果出现以下错误:
erorr:Cannot identify ‘/dev/video0’: 2, No such file or directory
需要先查看:虚拟机->选项->USB
查看以上红色部分是否勾选,如果没有勾选需要关闭Ubuntu后再进行勾选后启动,
(如果是使用USB接的摄像头可以在虚拟机->可移动设备->(中看到串口号))。
注:如果你在可移动设备中连接了你的电脑自带摄像头,但还是没有用的话的,你就需要查看一下,你的笔记本电脑摄像头的型号是否能与linux兼容,还需要产询一下,不然你在怎么都打开不的,所以就认命去用usb摄像头吧。
查询地址:http://www.ideasonboard.org/uvc/
关于串口权限问题
解决:
$ sudo gpassed --add USER_NAME dialout
(USER_NAME表示你的用户名)
2、URDF机器人建模
(机器人 模型描述格式,xml格式)
主要的两大类:
<link
>
描述机器人某个刚体部分的外观与物理结构性;
尺寸(size),
颜色(color),
形状(shape),
惯性矩形(inertial matrix),
碰撞参数(collison properties)等
<visual
>
描述机器人link部分的外观参数;
<inertial
>
描述link的惯性参数
<collision
>
描述link的碰撞属性
注:link origin是link的位置中心坐标,进行旋转、移动等操作都需要在origin设置。
<joint
>
描述机器人关节的运动学与动力学属性;
包括关节运动的位置与速度限制;
根据关节运动形式,可以将其分为六中类型(使用最多的是continuous、revolute)。
注:joint origin同样是坐标
子标签包括:
总体结构:
创建机器人模型功能包:
catkin_create_pkg mbot_description urdf xacro//最后两个是依赖包
在生成的mbot_description功能包文件中创建一下文件夹
执行launch文件:roslaunch 功能包名 .launch文件
urdf文件(如:mbot_base.urdf)
添加一个圆柱体模型
<?xml version="1.0"?>//解析文件为xml文件格式
<robot name="mobt">
<link name="base_link">
<visual>//外观参数
<origin xyz=" 0 0 0" rpy="1.57 0 0" />//坐标设置xyz,旋转角度设置rpy
<geometry>//形状
<cylinder length="0.16" radius="0.20"/>//圆柱体,高(length);半径(radius)
</geometry>
<material name="yellow">//材质
<color rgba="1 0.4 0 0.5"/>//颜色设置rbg,a为透明度(0~1)
</material>
</visual>
</link>
</robot>
如图反应:
添加joint类(添加左轮,以此类推添加右轮)(以下注释只用于说明,运行时必须删除)
#使用joint必须说明其父类,要明白他只是一个可以活动的关节
<joint name="left_wheel_joint" type="continuous">#无限旋转类型
<origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>#说明joint父类,坐标的参考
<child link="left_wheel_link"/>#说明其子类
<axis xyz="0 1 0"/>
</joint>
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
添加传感器模型进入:
添加纹理文件是模型更加逼真,需要建立一个meshes文件夹在功能包下
纹理文件这些可以不用自己编写,可以去ros论坛下载,有很多。
<link name="kinect_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 1.5708"/>
<geometry>
<mesh filename="package://mbot_description/meshes/kinect.dae" />//这里对纹理信息进行加载,路径使用从package到纹理文件.dae
</geometry>
</visual>
</link>
<joint name="laser_joint" type="fixed">
<origin xyz="0.15 0 0.11" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="kinect_link"/>
</joint>
urdf的进化文件——xacro文件(为了简化urdf的代码量)
1、常量定义:类似于C中的define
<xacro:property name= "M_PI" value="3.1415926"/>
常量的使用:
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
注:使用定义的时候,都需要使用“${变量(运算)等}”
2、xacro的宏定义(类似于c/c++中的函数定义)
<xacro:macro name="test" params="A B C">
。。。
</xacro:macro>
调用的时候:
<test A="A_value" B="B_value" C="C_vlalue"/>
文件包含:
<xacro:include filename="$(find mbot_description)/urdf/xacro/mbot_base.xacro" />
**注:**需要向函数定义的一样,将机器人模型组件写成一个零件文件(就如函数),多个类型的组件形成多个零件描述urdf(xacro文件),额外定义一个xacro用来作为顶层文件,调用这些零件xacro,就像C中的main()的作用。
在launch启动文件中如何启动后xacro文件,则需要在launch文件开头添加:
<!-- 加载xacro解析器 -->
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot.xacro'" />
<arg name="gui" default="true" />