机器人操作系统ROS: 典型功能实现方法详解
李宝全
ROS体系 ....................................................................................................................... 2 ROS安装 ....................................................................................................................... 3 TurtleBot 配置与运行 ................................................................................................... 3 ROS基础的学习 ........................................................................................................... 4 P3-AT/DX ...................................................................................................................... 8
ROSARIA配置与运行 ............................................................................................................. 8 ROSARIA键盘控制: .............................................................................................................. 10 ROSARIA程序控制方式: .................................................................................................... 11 Android遥控 ............................................................................................................................. 11 TurtleBot的键盘控制: ................................................................................................ 12 配置USB转串口 ........................................................................................................ 12 CmakeList.txt的制作 .................................................................................................. 13 图像的发布与接收...................................................................................................... 13
图像的接收,处理与显示 ...................................................................................................... 13 Kinect端获取图像 .................................................................................................................. 14 内置USB 摄像头图像获取 .................................................................................................... 15 外接USB摄像头图像获取 .................................................................................................... 17 KinectSkeleton ............................................................................................................. 17 TF Listener(综合实现人体跟踪) ................................................................................ 19 Voice ............................................................................................................................ 22
语言识别pocketsphinx ........................................................................................................... 22 识别结果的接收与显示 .......................................................................................................... 23 语言发布 .................................................................................................................................. 23 综合: 捕获String并发声 ........................................................................................................ 25 两主机通讯ROS_Network ......................................................................................... 25 ROS_OpenTLD ........................................................................................................... 27 ROS学习材料 ............................................................................................................. 27
1
ROS体系
版本:
Hydro 2013-09-04 Groovy 2012-12-31 Fuerte 2012-04-23 Electric
Diamondback
ROS是一种分布式的处理框架。
文件系统: 在硬盘上查看的ROS源代码的组织形式 包 Package:
含有manifest.xml 或package.xml?
比如下文中的turtlebot_teleop,turtlebot_bringup。 堆:Stack 包的集合
含有stack.xml
编译方法:
catkin:Groovy及以后版本
rosbuild:用于Fuerte及以前版本
常用命令: rostopic list;列出系统中的所有Topic
rosdep: 安装依赖包, 例如 rosdep install rosaria
安装时, 需要先建一个工作空间,然后把gitgub网站上相应的包下载到src文件夹下,再执行该语句。具体见 “ROSARIA配置与运行”一节。
环境变量设置:export 例如:
export ROS_HOSTNAME=marvin
export ROS_MASTER_URI=http://hal:11311
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
2
ROS安装
安装教程:http://wiki.ros.org/hydro/Installation/Ubuntu
sudo sh -c 'echo \latest.list' 1.3 安装keys
wget http://packages.ros.org/ros.key -O - | sudo apt-key add - 1.4 安装
使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
1.5初始化rosdep sudo rosdep init rosdep update 1.6环境设置
echo \source ~/.bashrc 1.7得到rosintall
sudo apt-get install python-rosinstall
TurtleBot 配置与运行
介绍TurtleBot的主页面(安装&运行): http://wiki.ros.org/Robots/TurtleBot
TurtleBot包(Package)的安装过程
安装(turtlebot/Tutorials/hydro/Installation ):按照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/setup.bash. 说明:
a) 在终端中输入这一行后很快就结束.
b) 效果是在.bashrc(Home中的隐藏文件)的最后一行加入了\
/opt/ros/hydro/setup.bash\
c) 效果等效于命令> echo \这样的话就不
用每次启动都输入命令“source /opt/ros/hydro/setup.bash”了. d) 这个好像在安装ROS时已经执行过了,不需要再执行一次吧? 3. 之后加入kobuki的udev规则:> rosrun kobuki_ftdi create_udev_rules
安装完之后还需要加入网络时间控制(turtlebot/Tutorials/hydro/Post-Installation Setup ), 否则与kokuki无法通讯.
1.首先安装chrony:sudo apt-get install chrony 2.再进行syncNTP:sudo ntpdate ntp.ubuntu.com
问题: 我重装系统后再安装turtlebot后,连接不上kokuki,但能正常连接Kinect。在命令
3
行中,提示到bad callback, 因此说明有很多件没有安装成功。需要将其卸载重装,可以网上搜索Uninstall turtlebot来卸载并重装。
运行:
1. 首先打开机器人核心服务程序:打开一个终端:键入: roscore //
2. 系统的检测:New Terminal:输入命令 roslaunch turtlebot_dashboard
turtlebot_dashboard.launch 之后就会弹出kobukiDashboard-rqt 3. kobuki的运动控制:
a. New Terminal: TurtleBot Bringup > roslaunch turtlebot_bringup minimal.launch 用于
初始化机器人?
b. New Terminal:Teleoperation/ Keyboard Teleop : roslaunch turtlebot_teleop
keyboard_teleop.launch 开启键盘控制这一节点, 用于键盘控制机器人的运动.
4. 应用视觉传感器kinect并启动rviz界面: 3D Visualisation
a. New Terminal: > roslaunch turtlebot_bringup 3dsensor.launch; //将3Dsensor加入到系
统中, 初始化kinect传感器//kinect最好插到USB2.0上
b. 启动rviz的view_robot :New Terminal: roslaunch turtlebot_rviz_launchers
view_robot.launch // rviz中也整合了上一步的kobuki的运动控制 c. 这个也可以在p3at上的kinect上运行.
5. SLAM: 与之前的两项无关. 需要重新开始, 否则就报错了.
a. New Terminal: 开启ROS服务: roscore
b. New Terminal: 启动kobuki:roslaunch turtlebot_bringup minimal.launch
c. New Terminal: 运行gmapping Demo:roslaunch turtlebot_navigation
gmapping_demo.launch
d. 启动RVIZ的navigation:New Terminal: roslaunch turtlebot_rviz_launchers
view_navigation.launch
e. 保存建图的结果:rosrun map_server map_saver -f /tmp/my_map f. 说明: 该例程只用到kobuki, 没有用到Kinect. 6. 退出:ctrl+c
ROS基础的学习
ROS Tutorials:http://wiki.ros.org/ROS/Tutorials
1.1.1 Installing and Configuring Your ROS Environment 创建catkin workspace:
1. $ mkdir -p ~/catkin_ws/src //产生工作空间Workspace文件夹, 并产生源空间src文件夹 2. $ cd ~/catkin_ws/src
3. $ catkin_init_workspace //
a. 初始化工作空间//
b. 在src中仅生成一指向/opt/ros/hydro/share/catkin/cmake/toplevel.cmake的
CMakeLists.txt的链接,即CMakeLists.txt的内容与toplevel.cmake的内容一样
4. $ cd ~/catkin_ws/ //回到工作空间中 5. $ catkin_make //build工程??
a. 要在工作空间目录下输入该命令 b. //会产生build,devel文件夹
6. $ source devel/setup.bash //在当前bash环境下读取并执行devel/setup.bash 中的命令
工作空间的结构(包含包的):
workspace_folder/ -- WORKSPACE src/ -- SOURCE SPACE
CMakeLists.txt //怎么没有这个呢 -- 'Toplevel' CMake file, provided by catkin package_1/
4
CMakeLists.txt -- CMakeLists.txt file for package_1 package.xml -- Package manifest for package_1 ...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n package.xml -- Package manifest for package_n
1.1.2 Navigating the ROS Filesystem
1. 查找某一包(package): 使用命令(例如)$ rospack find roscpp. 则会返回路径:
/opt/ros/hydro/share/roscpp
2. 利用命令$ roscd roscpp, 则直接进入/opt/ros/hydro/share/roscpp文件夹. 3. $ pwd //报告当前位置
1.1.3 Creating a ROS Package
上接1.1.1
1. $ cd ~/catkin_ws/src: 首先进入src文件夹.
2. $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp:创建包
a. beginner_tutorials为产生的包的名称,
b. std_msgs, roscpp, rospy为依赖项(dependencies)
1.1.4 Building a ROS Package 上接1.1.3
1. $ cd ~/catkin_ws/ : 首先返回工作空间文件夹. 2. $ ls src: 查看src文件夹中的内容,
a) 结果为beginner_tutorials CMakeLists.txt. b) 链接CMakeLists.txt一直存在
c) 命令ls为列出当前文件夹下的东西 3. $ catkin_make. //build
a) 需要在工作空间目录下运行该命令
b) 若在src文件夹下运行该命令,会有错误提示The specified base path
\contains a CMakeLists.txt but \must be invoked in the root of workspace.
1.1.10 Creating a ROS msg and srv 2.1产生一个消息: 1. 创建一个消息
a) cd ~/catkin_ws/src/beginner_tutorials首先进入文件夹. b) 再创建一个文件夹$ mkdir msg.
c) $ echo \创建一文件Num.msg, 并写入一行话int64 num,
当然还可以多加入几行.
2. 对(beginner_tutorials中的)package.xml添加下面两行:
a)
3. 对(beginner_tutorials中的)CMakeList.txt做如下修改 :
a) 在原有的find_package(xxx)中加入“message_generation”
b) 在catkin_package()中添加CATKIN_DEPENDS message_runtime
c) 取消add_message_files()的注释, 并修改为add_message_files(FILES Num.msg) d) 取消generate_messages(DEPENDENCIES std_msgs)的注释
2.2使用rosmsg
5