stage simulator
---恢复内容开始---
运行自带地图
rosrun stage_ros stageros /opt/ros/indigo/share/stage_ros/world/willow-erratic.world
控制机器人运动
sudo apt-get install ros-indigo-teleop-twist-keyboard
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
简单的gmapping&保存map
rosrun gmapping slam_gmapping scan:=base_scan
rosrun map_server map_saver
在home目录下查看地图
利用激光雷达数据,在前方有障碍物0.5米内停止前行
#include<ros/ros.h>
#include<sensor_msgs/LaserScan.h>
#include<geometry_msgs/Twist.h> class Stopper{
public:
const static double FORWARD_SPEED_MPS = 0.5;
const static double MIN_SCAN_ANGLE_RAD = -30.0/180*M_PI;
const static double MAX_SCAN_ANGLE_RAD = +30.0/180*M_PI;
const static float MIN_PROXOMITY_RANGE_M = 0.5; Stopper();
void startMoving();
private:
ros::NodeHandle node;
ros::Publisher commandPub;
ros::Subscriber laserSub;
bool keepMoving;
void moveForward();
void scanCallback( const sensor_msgs::LaserScan::ConstPtr& scan);
};
Stopper::Stopper(){
keepMoving = true;
commandPub = node.advertise<geometry_msgs::Twist>("cmd_vel",10);
laserSub = node.subscribe("base_scan",1, &Stopper::scanCallback,this); } void Stopper::moveForward(){
geometry_msgs::Twist msg;
msg.linear.x = FORWARD_SPEED_MPS;
commandPub.publish(msg);
} void Stopper::scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan){
int minIndex = ceil((MIN_SCAN_ANGLE_RAD - scan->angle_min) / scan->angle_increment);
int maxIndex = floor((MAX_SCAN_ANGLE_RAD - scan->angle_min) / scan->angle_increment);
float closestRange = scan->ranges[minIndex]; for(int currIndex = minIndex + 1; currIndex <= maxIndex; currIndex++){ if(scan->ranges[currIndex] < closestRange){
closestRange = scan->ranges[currIndex];
}
ROS_INFO_STREAM("closest range: " <<closestRange);
if(closestRange < MIN_PROXOMITY_RANGE_M){
ROS_INFO("stop");
keepMoving = false;
}
} } void Stopper::startMoving(){
ros::Rate rate(10);
ROS_INFO("start_moving");
while(ros::ok()&&keepMoving){
moveForward();
ros::spinOnce();
rate.sleep();
}
} int main(int argc,char **argv){
ros::init(argc,argv,"stopper");
Stopper stopper;
stopper.startMoving();
return 0; }
stage simulator的更多相关文章
- ROS_Kinetic_x 目前已更新的常用機器人資料 rosbridge agvs pioneer_teleop nao TurtleBot
Running Rosbridge Description: This tutorial shows you how to launch a rosbridge server and talk to ...
- TurtleBot教程
TurtleBot TurtleBot combines popular off-the-shelf robot components like the iRobot Create, Yujin Ro ...
- 第九课,ROS仿真1
---恢复内容开始--- 1.stage simulator 它是一个轻量级的仿真软件,它的包名称是stage_ros,可以进入看看,其包含地图在子目录world下, 启动之: rosrun stag ...
- teb教程6
代价地图的转换 简介:本部分关于怎样把代价地图转换插件应用到转换占据栅格costmap2d到几何形状来优化(测试阶段) teb_local_planner包支持costmap_converter插件, ...
- unable to boot the simulator,无法启动模拟器已解决
突然模拟器报错:unable to boot the simulator(无法启动模拟器) 试了好几种解决办法,删除所有的模拟器重启以后再添加,删除钥匙串登陆中的证书,重新安装Xcode都不行 最后通 ...
- Spark DAGSheduler生成Stage过程分析实验
RDD.Action触发SparkContext.run,这里举最简单的例子rdd.count() /** * Return the number of elements in the RDD. */ ...
- 一个简单的游戏开发框架(四.舞台Stage)
首先是StageManager类: class StageManager : public Singleton<StageManager> { friend class Singleton ...
- Unable to run app in Simulator
xcode6 beta出现 “Unable to run app in Simulator” 错误提示,之前一直用着好好的,重启xcode就可以了. xcode6 beta出现 “Unable to ...
- Rasterizer Stage(读书笔记3 --- Real-Time rendering)
rasterizer stage的目标:计算和设置每个像素的颜色.将屏幕空间的二维顶点和每个顶点的shading信息转换为屏幕上的像素. rasterizer stage可以分为几个阶段:triang ...
随机推荐
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制
第一部分 基本设计 目前最新版本的C#驱动MongoDB-CSharpDriver-2.2.3,比之前的版本更新比较大,在网上很难找到这个版本的相关C#操作资料,以下都是个人自发研究.测试的,如有雷同 ...
- Web Servic和Web API的区别
Web Service:1.它是基于SOAP协议的,数据格式是XML2.只支持HTTP协议3.它不是开源的,但可以被任意一个了解XML的人使用4.它只能部署在IIS上Web API:1.这是一个简单的 ...
- springmvc 组合注解
组合注解的意思就是一个注解中包含多个注解.在springmvc 的@RestController中,你就可发现. @Target(ElementType.TYPE) @Retention(Retent ...
- tp-link便携式路由器固件升级方式
系统: win-7 32bit 关闭杀毒软件,关闭防火墙(保险起见) 各位从tp-link的官网下载自己对应的固件 http://www.tp-link.com.cn/product/list_por ...
- Hudson(Jenkins)持续集成插件开发环境搭建
Hudson持续集成插件开发环境搭建 第一步安装java jdk,至于版本的话推荐1.6以上吧.安装好jdk设置环境变量,确保你在cmd中输入java -version有提示你jdk的版本信息等,也就 ...
- 关于Unity四元数相乘先后顺序的问题
在unity中四元数和向量相乘在unity中可以变换旋转.四元数和四元数相乘类似矩阵与矩阵相乘的效果. 矩阵相乘的顺序不可互换,只有特殊条件矩阵才可互换.四元数相乘类似,今天就因为这个问题掉进坑里了, ...
- 自己写的java用jxl导出到excel工具
package com; import java.io.BufferedOutputStream; import java.io.File; import java.io.IOException; i ...
- [转]unicode,ansi,utf-8,unicode big endian的故事
unicode,ansi,utf-8,unicode big endian的故事很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的 ...
- Swift基础语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...
- centos7 gradle
cd /usr/local wget https://downloads.gradle.org/distributions/gradle-2.13-bin.zip unzip gradle-2.13- ...