机器人操作系统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节点(可执行文件).