机器人学总结(5)—— ROS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mobius_strip/article/details/79239707

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

编译工作空间

扫描二维码关注公众号,回复: 3360302 查看本文章
cd ~/dev/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

猜你喜欢

转载自blog.csdn.net/mobius_strip/article/details/79239707