0 平台(Platform)
0.1 操作系统(operating system)
这里我使用的是虚拟机WMware,当然也可以直接安装到硬盘中。我是用的是Ubuntu 16.04,也可以使用别的版本,注意不同版本的操作系统对应不同的ROS版本,这里我安装的是Kinetic。
0.2 安装ROS
添加软件库
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
设置秘钥,为了确认源代码是正确的,并且没有人在未经所有者授权的情况下修改代码。
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
首先升级软件,避免版本问题。
sudo apt-get update
安装ROS,这里我安装了完整版(应该不缺这点空间吧(⊙o⊙)…)
sudo apt-get install ros-kinetic-desktop-full
初始化rosdep,为了轻松地安装库和编译编译源代码时的系统依赖。
sudo rosdep init
rosdep update
临时环境变量配置(每次在新的terminal中要重新输入)
source /opt/ros/kinetic/setup.bash
永久环境变量配置(如果有多个版本的ROS,只会配置当前使用的)
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装一些工具
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
0.3 工作空间
创建工作空间(这里使用catkin工具)
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
编译工作空间
cd ~/catkin_ws
catkin_make
配置
source devel/setup.bash
0.4 测试
启动ROS:
roscore
运行测试(会出现一个窗口,里面有一只乌龟)
rosrun turtlesim turtlesim_node
0.5 WIKI
如果需要其他的详细信息或遇到什么问题,直接查看官方文档:
http://wiki.ros.org/kinetic/Installation/Ubuntu
1 架构和通信
1.1 架构
关于架构,在编写过一些应用之后再回来看,就会觉得清晰很多了。ROS的架构分成三个部分:
层次名称 | 功能 |
---|---|
文件系统级 | 文件的存储结构 |
计算图级 | 节点间的通信方式(运行的程序看做是节点) |
社区级 | 知识和代码的共享 |
ROS运行时的程序可以看成是一个个的节点,对应的文件存储单位为包(package),一般的包中会包含如下文件或文件夹:
文件或文件夹 | 功能 |
---|---|
package.xml | 提供关于包、许可证、依赖关系、编译标志等信息。如果想增加依赖集,可以修改这个文件。 |
CMakeLists.txt | 存储编译信息。源文件、自定义消息和服务的编译相关信息。 |
include/ | 存放头文件的文件夹,可以在CMakerLists.txt设置 |
src/ | 存放源代码的文件夹 |
msg/ | 存放自定义message的文件夹 |
srv/ | 存放自定义service的文件夹 |
在工作空间(catkin_ws)中包含三个文件夹:
文件夹 | 功能 |
---|---|
src/ | 存放功能包 |
build/ | 存放编译过程生成的文件 |
devel/ | 存放编译后的文件夹 |
1.2 通信
通信主要有两种方式 消息 和 服务。
1.2.1 消息(msg)
消息有对应的发布者(publisher)和订阅者(Subscriber)。publisher把消息广播出去,Subscriber接收,即使一方不存在也不会出错。不过如果没有publisher则Subscriber可能会接收到错误数据。
1.2.2 服务(srv)
服务需要有对应的服务器(server)和客户端(client)。他们需要同时存在才能进行交互。
1.2.3 编写程序
创建功能包
cd ~/dev/catkin_ws/src
catkin_create_pkg package_name std_msgs roscpp
包名后面跟着的是依赖包,这里是标准的信息定义和C++,如果在程序写到一半的时候发现需要别的依赖包,可以再package.xmk中添加。可以通过下面命令编译所有在src文件夹中的包:
catkin_make
也可以编译制定的包
catkin_make --pkg package_name
加入新的文件后需要在CMakeList.txt中做相应的修改。
消息的例子:http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber
服务的例子:http://wiki.ros.org/ROS/Tutorials/WritingServiceClient
自定义类型:http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv
2 调试工具
2.1 topics
使用topics 可以显示对应的消息信息和图像化对象。
http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics
2.2 rqt
rqt可以用图形化显示数据和通信。
http://wiki.ros.org/rqt
2.3 rosbag
rosbag 可以将某个时间段的信息存储起来,然后可以通过回放来分析,还可以通过rqt_bag利用UI进行操作。
http://wiki.ros.org/rosbag/Commandline
http://wiki.ros.org/rqt_bag
3 建模和仿真
3.1 urdf
利用urdf文件对机器人进行建模,link定义关节模块,joint定义链接,可以加载模型文件。
http://wiki.ros.org/urdf
3.2 rviz
利用rviz进行仿真,对模型的控制需要是用对应的代码实现(publish对应的message)。
http://wiki.ros.org/rviz
3.3 xacro
使用宏优化urdf的定义,可以简化文件。
http://wiki.ros.org/xacro
3.4 roslaunch
使用launcn文件可以同时加载多个程序启动,并且设置对应的参数。
http://wiki.ros.org/roslaunch
对于很多成熟的产品,可以在git-hub上找到以上对应的所有文件。
4 实际机器人
4.1 UR (unversal robot)
可以使用官方的ur_driver和git-hub上的ur_modern_driver驱动机器人:
https://github.com/ros-industrial/universal_robot
https://github.com/ThomasTimm/ur_modern_driver
4.1.1 hardware_interface
硬件的30002和30003,通过TCP协议通信,通过read和write函数进行数据交换。
4.1.2 /ur_driver/joint_speed
通过速度接口腿机器人进行操作,只有在速度和加速度(正负符号没有作用,是个上界)都不为0时才能运行。
4.1.3 /follow_joint_trajectory
通过点集规划路径,起始点需要时当前机器人的位置,初始和结束点的速度为0,加速度没有起作用,通过插值三次曲线运行,底层通过位置命令运动。
4.1.4 /ur_driver/URScript
通过std_msgs::String类型的数据直接发送个机器人。数据格式:“movej([q0, …, qn], a=1.4, v=1.05, t=0, r=0)”。
#5 常见问题及解决
http://blog.csdn.net/wuguangbin1230/article/details/77803017