turtlebot的仿真和自动导航

在ROS中开始自主机器人仿真 - 2 让turtlebot跑起来

借助ROS的工具箱让turtlebot在gazebo中运行起来.

part 1.1: 让turtlebot跑起来

1. 在gazebo中显示机器人

roslaunch turtlebot_gazebo turtlebot_world.launch

turtlebot的仿真和自动导航_第1张图片

默认加载了一个playground 的world文件.

2. 用键盘进行控制机器人

复制代码

roslaunch turtlebot_teleop keyboard_teleop.launch --screen
Moving around:
   u    i    o
   j    k    l
   m    ,    .

q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%
space key, k : force stop
anything else : stop smoothly

复制代码

可以通过以上方式控制机器人的运动了.

3. 在rviz中显示

roslaunch turtlebot_rviz_launchers view_robot.launch --screen

turtlebot的仿真和自动导航_第2张图片

在rviz的现实中,为了便于显示我只添加了camera rgb图像 (topic: /camera/rgb/image_raw)和 PointCloud2 (topic:/camera/depth/points). 同样也可以在左边的列表中添加laserscan (topic: /scan), DepthCloud (topic:/camera/depth/image_raw)等等.

关于Kinect2 (RGBD) 如何转换成laserscan, 以及点云转换都会在接下来的部分有所介绍.

part 1.2: 解释与扩展

1. gazebo启动文件

roscd turtlebot_gazebo

进入

复制代码

/opt/ros/indigo/share/turtlebot_gazebo
├── cmake
│   ├── turtlebot_gazeboConfig.cmake
│   └── turtlebot_gazeboConfig-version.cmake
├── launch
│   ├── amcl_demo.launch
│   ├── gmapping_demo.launch
│   ├── includes
│   │   ├── create.launch.xml
│   │   ├── kobuki.launch.xml
│   │   └── roomba.launch.xml
│   └── turtlebot_world.launch
├── maps
│   ├── playground.pgm
│   └── playground.yaml
├── package.xml
└── worlds
    ├── corridor.world
    ├── empty.world
    └── playground.world

复制代码

可以找到我们加载的playground.world的文件.

* turtlebot_world.launch*文件中, 通过加载gazebo_ros包中的empty.launch启动Gazebo, 通过名为world_name 的参数可以修改仿真的Gazebo环境. 

替换为
可将Gazebo仿真环境替换为corridor. 通过在Gazebo中编辑环境也可以很轻松的可以生成自己的world. 

哈哈, 现在可以不同的Gazebo物理环境中实现仿真了, 满足感溢出.

接下来我们看看Kinect2 (RGBD) 如何转换成laserscan, 我们会在下面发现name = "depthimage_to_laserscan", 通过remap


我们找到了在rviz中显示的topic了.

2. 机器人控制

除了上述提到的控制方法外,也可以采用

roslaunch kobuki_keyop keyop.launch

查看keyboard_teleop.launch文件,

复制代码



  
    
    
    
  

复制代码

可以发现速度命令的topic映射到了主题cmd_vel_mux/input/teleop, 查看主题类型

rostopic type cmd_vel_mux/input/teleop
geometry_msgs/Twist

通过rostopic pub 命令

复制代码

rostopic pub /cmd_vel_mux/input/teleop geometry_msgs/Twist "linear:
  x: 0.1
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.1"

复制代码

可以发送角速度0.1rad/s, 线速度0.1m/s, 可进一步查看 REP 103:Standard Units of Measure and Coordinate ConventionsREP 103:Standard Units of Measure and Coordinate Conventions .

3. 显示

rviz的显示可以很大程度的帮助ROS开发过程中的调试工作. 除了rviz外,还有一些其他的工具.

显示图像topic image_view

rosrun image_view image_view  image:=/camera/rgb/image_raw

node与topic 连接图 rqt_graph

rosrun rqt_graph rqt_graph
参数可视化配置rqt_reconfigure
rosrun rqt_reconfigure rqt_reconfigure

rqt可以方便让你用所有rqt_初始的工具

rqt

--------------------------------------------------------------------------------------------------------------------------------------------------

我们已经在gazebo中实现了机器人的仿真,而且能够控制机器人的运动, 查看机器人所感知到的信息, 包括lasercan, 图像信息, 深度信息, 点云, 也包括没有提到的速度信息. 这里,我们建立用ROS navigation stack 导航功能包ROS navigation stack 导航功能包 , 进行机器人地图构建与导航.

part 2.1: 让turtlebot自主导航

1 创建地图

使用下面的命令,借助键盘遥控机器人创建精确详尽的地图.

加载Gazebo仿真环境

roslaunch turtlebot_gazebo turtlebot_world.launch
 

开始构建地图

roslaunch turtlebot_gazebo gmapping_demo.launch

 

rviz可视化

roslaunch turtlebot_rviz_launchers view_navigation.launch

 

键盘遥控

roslaunch turtlebot_teleop keyboard_teleop.launch

 

通过不断地让机器人在环境中游走, 就可以得到一个grid 地图.

turtlebot的仿真和自动导航_第3张图片

2 保存地图

保存地图到本地文件夹

rosrun map_server map_saver -f ~/file_folder/test_map

 

3 加载地图

关闭之前的节点, 重新打开gezebo仿真环境, 加载地图, 进行导航.

加载Gazebo仿真环境

roslaunch turtlebot_gazebo turtlebot_world.launch

 

加载地图
roslaunch turtlebot_gazebo amcl_demo.launch map_file:=~/file_folder/test_map.yaml

 

rviz可视化
roslaunch turtlebot_rviz_launchers view_navigation.launch

 

part 2.2: 解释与扩展

对于仿真环境,显示以及配置文件已经在之前详细说明.

gmapping

上文采用gmapping进行地图构建, gmapping是一个ros自带的地图构建工具包。slam_gmapping采用激光数据(topic:sensor_msgs/LaserScan)生成二维地图(topic:nav_msgs/OccupancyGrid). 在gmappingtutorial中 ,可以发现, 订阅的主题,发布的主题,以及调用的服务。

订阅主题

tf (tf/tfMessage) 坐标系转换
scan (sensor_msgs/LaserScan) 激光数据

发布主题

map_metadata (nav_msgs/MapMetaData)
map (nav_msgs/OccupancyGrid)
地图数据
entropy (std_msgs/Float64)
表示机器人位姿的不确定性

服务

dynamic_map (nav_msgs/GetMap)
调用获得地图数据

amcl

amcl全称adaptive Monte Carlo localization,是一个机器人二维环境的概率定位系统, 在已知地图的环境中, 利用粒子滤波跟踪机器人的位姿. ROS中的amcl节点订阅激光数据sensor_msgs/LaserScan和地图数据nav_msgs/OccupancyGrid, 得到机器人的估计位姿.

订阅主题

scan (sensor_msgs/LaserScan) 激光数据
tf (tf/tfMessage)
initialpose (geometry_msgs/PoseWithCovarianceStamped)
map (nav_msgs/OccupancyGrid)地图信息

发布主题

amcl_pose (geometry_msgs/PoseWithCovarianceStamped)机器人在地图中的估计位置及协方差
particlecloud (geometry_msgs/PoseArray) 粒子云位置估计
tf (tf/tfMessage)

你可能感兴趣的:(turtlebot的仿真和自动导航)