机器人操作系统ROS典型功能实现方法详解

  • 格式:docx
  • 大小:48.32 KB
  • 文档页数:16

机器人操作系统ROS: 典型功能实现方法详解

李宝全

ROS体系

版本:

Hydro 2013-09-04

Groovy 2012-12-31

Fuerte 2012-04-23

Electric

Diamondback

ROS是一种分布式的处理框架。

文件系统: 在硬盘上查看的ROS源代码的组织形式

包 Package:

含有 或

比如下文中的turtlebot_teleop,turtlebot_bringup。

堆:Stack

包的集合

含有

编译方法:

catkin:Groovy及以后版本

rosbuild:用于Fuerte及以前版本

常用命令: rostopic list;列出系统中的所有Topic

rosdep: 安装依赖包, 例如 rosdep install rosaria

安装时, 需要先建一个工作空间,然后把gitgub网站上相应的包下载到src文件夹下,再执行该语句。具体见 “ROSARIA配置与运行”一节。 环境变量设置:export

例如:

export ROS_HOSTNAME=marvin

export ROS_MASTER_URI=

Bulks给的一些有用的命令

rosnode info /rosaria_teleop_key_1

rosrun rqt_robot_steering rqt_robot_steering

rosrun rqt_gui rqt_gui

rostopic help

rosnode help

rosnode info /RosAria

rosnode info /rosaria_teleop_key_1

rosnode list

echo $ROS_HOSTNAME

ROS安装

安装教程:

安装keys

安装

使Debian包为最新:sudo apt-get update

Full安装:sudo apt-get install ros-hydro-desktop-full

会出现一个界面,利用Tab选择Yes即可

成功则提示:ldconfig deferred processing now taking place

找到可以使用的包:

apt-cache search ros-hydro

初始化rosdep

sudo rosdep init

rosdep update

环境设置

echo "source /opt/ros/hydro/" >> ~/.bashrc

source ~/.bashrc

得到rosintall

sudo apt-get install python-rosinstall

TurtleBot 配置与运行

介绍TurtleBot的主页面(安装&运行):

TurtleBot包(Package)的安装过程

安装(/// ):按照Debs Installation按照方法来安装:

1. 首先安装:> sudo apt-get install ros-hydro-turtlebot ros-hydro-turtlebot-apps ros-hydro-turtlebot-viz ros-hydro-turtlebot-simulator ros-hydro-kobuki-ftdi

2. 之后加入sourse的bash中:> . /opt/ros/hydro/. 说明:

a) 在终端中输入这一行后很快就结束.

b) 效果是在.bashrc(Home中的隐藏文件)的最后一行加入了"source /opt/ros/hydro/",

c) 效果等效于命令> echo "source /opt/ros/hydro/" >> ~/.bashrc. 这样的话就不用每次启动都输入命令“source /opt/ros/hydro/”了.

d) 这个好像在安装ROS时已经执行过了,不需要再执行一次吧

3. 之后加入kobuki的udev规则:> rosrun kobuki_ftdi create_udev_rules

安装完之后还需要加入网络时间控制(/// ), 否则与kokuki无法通讯.

1.首先安装chrony:sudo apt-get install chrony

问题: 我重装系统后再安装turtlebot后,连接不上kokuki,但能正常连接Kinect。在命令行中,提示到bad callback, 因此说明有很多件没有安装成功。需要将其卸载重装,可以网上搜索Uninstall turtlebot来卸载并重装。

运行:

a. 首先打开机器人核心服务程序:打开一个终端:键入: roscore

2. 应用视觉传感器kinect并启动rviz界面:

a. New Terminal: > roslaunch turtlebot_bringup ;

3. SLAM: 与之前的两项无关. 需要重新开始, 否则就报错了.

a. New Terminal: 开启ROS服务: roscore

b. New Terminal: 启动kobuki:roslaunch turtlebot_bringup

c. New Terminal: 运行gmapping Demo:roslaunch turtlebot_navigation

d. 启动RVIZ的navigation:New Terminal: roslaunch turtlebot_rviz_launchers

e. 保存建图的结果:rosrun map_server map_saver -f /tmp/my_map

f. 说明: 该例程只用到kobuki, 没有用到Kinect.

4. 退出:ctrl+c

ROS基础的学习

ROS Tutorials:

Installing and Configuring Your ROS Environment

创建:

$ mkdir -p ~/catkin_ws/src .

package_n/

-- file for package_n

-- Package manifest for package_n

Navigating the ROS Filesystem

1. 查找某一包(package): 使用命令(例如)$ rospack find roscpp. 则会返回路径:

/opt/ros/hydro/share/roscpp

2. 利用命令$ roscd roscpp, 则直接进入/opt/ros/hydro/share/roscpp文件夹.

1. $ pwd $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp:创建包

a. beginner_tutorials为产生的包的名称,

b. std_msgs, roscpp, rospy为依赖项(dependencies)

Building a ROS Package

1. 上接 cd ~/catkin_ws/ : 首先返回工作空间文件夹.

2. $ ls src: 查看src文件夹中的内容,

a) 结果为beginner_tutorials .

b) 链接一直存在

c) 命令ls为列出当前文件夹下的东西

$ catkin_make. a ROS msg and srv

产生一个消息:

1. 创建一个消息

a) cd ~/catkin_ws/src/beginner_tutorials首先进入文件夹.

b) 再创建一个文件夹$ mkdir msg.

c) $ echo "int64 num" > msg/: 创建一文件, 并写入一行话int64 num, 当然还可以多加入几行.

2. 对(beginner_tutorials中的)添加下面两行:

a) message_generation

b) message_runtime

3. 对(beginner_tutorials中的)做如下修改 :

a) 在原有的find_package(xxx)中加入“message_generation”

b) 在catkin_package()中添加CATKIN_DEPENDS message_runtime

c) 取消add_message_files()的注释, 并修改为add_message_files(FILES

d) 取消generate_messages(DEPENDENCIES std_msgs)的注释 使用rosmsg

$ rosmsg show beginner_tutorials/Num. 应该输出int64 num

但但提示找不到该消息

使用查找命令$ rosmsg show Num, 应该输出[beginner_tutorials/Num]:int64 num. 但还是找不到

创建一个srv

1. 创建一个srv

$ roscd beginner_tutorials应该输出int64 a int64 b --- int64 sum. 但提示找不到该消息

使用查找命令 $ rossrv show AddTwoInts, 也只能查找到[rospy_tutorials/AddTwoInts]中的, 找不到[beginner_tutorials/AddTwoInts]中的.

与srv共同的下一步

在中, 取消generate_messages(DEPENDENCIES std_msgs)的注释(创建msg阶段已经完成)

在catkin_ws工作空间下输入命令: $ catkin_make

结果是生成了针对不同语言的头文件: msg的C++头文件在

~/catkin_ws/devel/include/beginner_tutorials/. Python脚本在 ~/catkin_ws/devel/lib/dist-packages/beginner_tutorials/msg. 列表处理语言文件在 ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/. 对于.srv, 生成的结果也类似. 生成成功!

上接,不需要经过生成msg与srv的过程

进入包cd ~/catkin_ws/src/beginner_tutorials

1.1 创建Publisher Node:src/ 文件(在该包的src文件夹下)

2.1 创建Subscriber Node:src/ 文件(在该包的src文件夹下)

3.1 Building your nodes 生成可执行文件

a) 在文件中(包的目录下面的)最后面加入(已经在之前msg&srv中生成并处理了,

若没经过上面的msg&srv阶段的处理, 也能正常编译生成)

b) add_executable(talker src该过程使用了. 生成的结果为在:devel/lib/beginner_tutorials下有talker与listener节点(可执行文件).