1.打开一个终端
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
roslaunch rbx1_bringup fake_turtlebot.launch
2.新打开一个终端
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
roslaunch rbx1_nav fake_move_base_blank_map.launch 
要是避障的话,运行
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src

roslaunch rbx1_nav fake_move_base_map_with_obstacles.launch

3.新打开一个终端
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
rosrun rviz rviz -d `rospack find rbx1_nav`/nav_fuerte.rviz
ADD这三个play就可以了,还要再ADDcostmap
4.新打开一个终端
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "map" }, pose: { position: { x: 0, y: 0, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'
 
 
rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "base_link" }, pose: { position: { x: 1.0, y: 0, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'
 
 
不能带<这个符号,不然不成功
ctrl+shift +t 测试
rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "base_link" }, pose: { position: { x: 1.0, y: 0, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'
rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "map" }, pose: { position: { x: 2, y: 0, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'
的确x轴向前移动了2米
 
rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "map" }, pose: { position: { x: 0, y: 0, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'
rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "map" }, pose: { position: { x: 2, y:1, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'

不行,出错

rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "map" }, pose: { position: { x: 0, y:1, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'

一次只能朝向一个方向行走

点击一下2d_Nav Goal,点击鼠标左键,可以选定一个目标位置,接着机器人就可以移动到目标位置
5.让机器人回到原点

rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped \
'{ header: { frame_id: "map" }, pose: { position: { x: 0, y: 0, z: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }'
点击rviz上的reset
6,打开一个新终端,
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src

rosrun rbx1_nav move_base_square.py

 
可以看到机器人沿一个正方形在走(这个代码解释已经完成)
7.第二步是运行了一个空白地图,现在把它换成带有障碍物的地图,找到这个终端,ctrl+c退出这个地图,然后运行
 roslaunch rbx1_nav fake_move_base_map_with_obstacles.launch
 
8.再运行rosrun rbx1_nav move_base_square.py  
可以看到机器人在正方形区域避障行走
三、amcl定位
先运行仿真机器人
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
roslaunch rbx1_bringup fake_turtlebot.launch
新打开一个终端,运行amcl节点,使用的已经准备好的测试地图,这个地图不是我们自己建的地图,我们自己要建地图的话,需要使用深度数据,然后用gmapping生成地图,amcl是二维环境下的概率定位系统,之所以说是概率定位系统,是因为它用的是自适应的蒙特卡洛的定位方法,就是之前的粒子滤波,用这个粒子滤波去跟踪机器人当前的状态。
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
 

roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml

先来看一下这个launch文件是怎么写的。
<launch>
  <!-- Set the name of the map yaml file: can be overridden on the command line. -->
  <arg name="map" default="test_map.yaml" />
  <!-- Run the map server with the desired map -->
  <node name="map_server" pkg="map_server" type="map_server" args="$(find rbx1_nav)/maps/$(arg map)"/>
  <!-- The move_base node -->
  <include file="$(find rbx1_nav)/launch/fake_move_base.launch" />
 
  <!-- Run fake localization compatible with AMCL output -->
  <node pkg="fake_localization" type="fake_localization"  name="fake_localization" output="screen" />
  <!-- For fake localization we need static transforms between /odom and /map and /map and /world -->
  <node pkg="tf" type="static_transform_publisher" name="odom_map_broadcaster" 
args="0 0 0 0 0 0 /odom /map 100" />
</launch>
可以看到它调用了map_server包用来加载地图,fake_localization,tf包里的static_transform_publisher的工具,还调用了fake_move_base_launch文件打开move_base节点并加载配置文件,然后运行amcl节点。主要作用是加载了一个地图(如下所示)
 

然后运行rviz

cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src

rosrun rviz rviz -d `rospack find rbx1_nav`/nav_fuerte.rviz

我是在rviz里加载了这几个display,其中global plan下的costmap,RobotModel,global plan下的Path,Axes是必须的。

然后就可以在rviz中看到实际效果了。左键选定目标位置,机器人就可以自主规划绕开障碍物到达目的地了。
程序:
1.

cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
roslaunch rbx1_bringup fake_turtlebot.launch
 
2.
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src

roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml

3.
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src

rosrun rviz rviz -d `rospack find rbx1_nav`/nav_fuerte.rviz

四、自主导航
但我们总是希望机器人能够自主进行导航,这样才更智能化。下面它做的是让目标点在地图中随机生成,然后让机器人自动导航到达其目标。
首先来看一下它的launch文件fake_nav_test.launch
<launch>
 
  <param name="use_sim_time" value="false" />
 
  <!-- Start the ArbotiX controller -->
  <include file="$(find rbx1_bringup)/launch/fake_turtlebot.launch" />
 
  <!-- Run the map server with the desired map -->
  <node name="map_server" pkg="map_server" type="map_server" args="$(find rbx1_nav)/maps/test_map.yaml"/>
 
  <!-- The move_base node -->
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <rosparam file="$(find rbx1_nav)/config/fake/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find rbx1_nav)/config/fake/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find rbx1_nav)/config/fake/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find rbx1_nav)/config/fake/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find rbx1_nav)/config/fake/base_local_planner_params.yaml" command="load" />
    <rosparam file="$(find rbx1_nav)/config/nav_test_params.yaml" command="load" />
  </node>
 
  <!-- Run fake localization compatible with AMCL output -->
  <node pkg="fake_localization" type="fake_localization" name="fake_localization" output="screen" />
 
  <!-- For fake localization we need static transform between /odom and /map -->
  <node pkg="tf" type="static_transform_publisher" name="map_odom_broadcaster" args="0 0 0 0 0 0 /map /odom 100" />
 
  <!-- Start the navigation test -->
  <node pkg="rbx1_nav" type="nav_test.py" name="nav_test" output="screen">
    <param name="rest_time" value="1" />
    <param name="fake_test" value="true" />
  </node>
 
</launch>
这个launch文件的功能比较多
(1)加载机器人驱动( <include file="$(find rbx1_bringup)/launch/fake_turtlebot.launch" />这样我们就不用在终端中再去加载机器人驱动了)
(2)加载地图
 <node name="map_server" pkg="map_server" type="map_server" args="$(find rbx1_nav)/maps/test_map.yaml"/>
这里的地图就是map_server,有时候可不需要
(3)调用move_base节点
 <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
并且加载了它的几个配置文件,分别是:
costmap_common_params.yaml,local_costmap_params.yaml,global_costmap_params.yaml,base_local_planner_params.yaml,nav_test_params.yaml
(4)调用之前的amcl节点
<node pkg="fake_localization" type="fake_localization" name="fake_localization" output="screen" />
(5)当然还有tf
<node pkg="tf" type="static_transform_publisher" name="map_odom_broadcaster" args="0 0 0 0 0 0 /map /odom 100" />
(6)加载nav_test.py程序,进行随机导航(这里的随机是指目标点位置随机)
其实这个launch文件好像是把之前运行的几个launch文件进行整合了。
运行
roscore
运行 
rqt_console(这个程序如果运行不了的话,运行sudo apt-get install ros-indigo-rqt ros-indigo-rqt-common-plugins ros-indigo-turtlesim,参考:http://blog.exbot.net/archives/1413
打开一个新终端,运行
 
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
roslaunch rbx1_nav fake_nav_test.launch 
打开一个新终端,运行
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
rosrun rviz rviz -d `rospack find rbx1_nav`/nav_test_fuerte.rviz
运行结果如下
之前运行的rqt_console是用来做调试的,可以看到机器人发送的状态信息。
    比如
 
可以看到目标点信息(going to ),状态信息(state),距离信息(Distance),成功率,速度等
程序:
1.
roscore
2.
rqt_console
3.
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
roslaunch rbx1_nav fake_nav_test.launch 

4.

 
cd ~/catkin_ws/
catkin_make
source ./devel/setup.bash
cd src
rosrun rviz rviz -d `rospack find rbx1_nav`/nav_test_fuerte.rviz

 

rbx1包里机器人仿真程序的实践的更多相关文章

  1. [Android Pro] Android Support 包里究竟有什么

    reference to : http://www.2cto.com/kf/201411/350928.html 随着 Android 5.0 Lollipop 的发布,Android 又为我们提供了 ...

  2. procps包里面的sysctl命令

    procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...

  3. jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder

    jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder 1,下载工具地址:www.idesksoft.com/classfinder.html,如图: 2 ...

  4. 直接修改别人jar包里面的class文件 工具:jclasslib

    出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半天,没有找 ...

  5. 不安装rpm包,取出rpm包里的文件

    1.查看rpm包里的文件 [root@VM_166_132 ~]# rpm -qlp mysql5.6.29-1-3.x86_64.rpm |more/etc/ld.so.conf.d/mysql-5 ...

  6. Java读取其他jar包里的配置文件

    最近要做个东西,需要自己控制数据库的事物,项目封装的框架,实在是提不起去阅读的兴趣, 就想直接去读框架的底层实现里面的数据连接的配置文件(如:Url,port,username,password等), ...

  7. 更新jar包里的配置文件

    更新jar包里的配置文件 起因 从笔记本传了个jar到服务器,运行的时候才发现配置文件一个ip项填错了.本来很简单的问题,maven重新打包就可以了,但是30多M的jar包就因为一个配置项错了又要重新 ...

  8. Java 操作jar包工具类以及如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  9. C#调用java包里的方法

    用IKVM,步骤: 下载ikvmbin-7.2.4630.5.zip,解压,把bin目录所在路径加到环境变量path里 2.电脑开始->CMD,输入ikvmc –out:”输出dll文件的路径” ...

随机推荐

  1. suid sgid sbit chattr lsattr find

    suid 一般用于二进制可执行文件不可用于shell脚本和目录,suid代表当用户执行此二进制文件时,暂时具有此文件所有者的权限 chmod 4xxx binfile sgid 一般用于目录,sgid ...

  2. 【AngularJS】Yeoman安装

    看不到PPT的请自行解决DNS污染问题.

  3. css:html() text() val()

    转http://www.jb51.net/article/35867.htm .html()用为读取和修改元素的HTML标签    对应js中的innerHTML .html()是用来读取元素的HTM ...

  4. JVM内存最大能调多大分析【经典】

       http://hi.baidu.com/suofang/blog/item/49c637c71c0afbd0d1006028.html  上次用weblogic 把 -XmxXXXX 设成2G, ...

  5. robotframe使用之时间控件

    robotframe使用之时间控件 正常的页面,时间控件会写在一个iframe里面,所以robotframework找不到对的ID或者xpath等. 要解决这个问题必选先显示iframe. 使用关键字 ...

  6. 彻底解决zend studio 下 assignment in condition警告

    最近在mac系统下安装zend studio作为php开发工具,把以前的代码导入,发现项目中有很多 “assignment in condition”的警告,造成原因是在条件判断的if.while中使 ...

  7. Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互

    前沿: 在全新的Camera API2架构下,常常会有人疑问再也看不到熟悉的SetParameter/Paramters等相关的身影,取而代之的是一种全新的CameraMetadata结构的出现,他不 ...

  8. dede二级导航与二级栏目 ----内容介绍二级导航

    {dede:channelartlist typeid='top'}//如果只需要拿一列,则需要使用row='1'这个属性否则会根据子频道的数目循环输出 <a href="{dede: ...

  9. Bootstrap学习速查表(一) 理论基础

    参考网站http://www.bootcss.com/ 第一步,起步,引入基本样式 <!-- 新 Bootstrap 核心 CSS 文件 --> <link rel="st ...

  10. ubantu 彻底卸载mysql

    卸载mysql 第一步 1 sudo apt-get autoremove --purge mysql-server-5.0 2 sudo apt-get remove mysql-server 3 ...