ROS 使用stage进行(LaserScan)激光扫描仿真
来源:互联网 发布:淘宝网开店卖什么好 编辑:程序博客网 时间:2024/06/06 04:10
以my_stage为例
创建工程名为my_stage的package。
运行以下命令:
cd ~/catkin_ws/srccatkin_create_pkg my_stage std_msgs roscppstd_msgs roscpp 为依赖包
在my_stage 中的src中新建my_stage.cpp文件
/* * my_stage.cpp * * Created on: Jul 30, 2016 * Author: unicorn */#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_PROXIMITY_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_PROXIMITY_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;}
修改CMakeLists文件如下
cmake_minimum_required(VERSION 2.8.3)project(my_stage)## Find catkin macros and libraries## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)## is used, also find other catkin packagesfind_package(catkin REQUIRED COMPONENTS roscpp std_msgs)## System dependencies are found with CMake's conventions# find_package(Boost REQUIRED COMPONENTS system)## Uncomment this if the package has a setup.py. This macro ensures## modules and global scripts declared therein get installed## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html# catkin_python_setup()################################################## Declare ROS messages, services and actions #################################################### To declare and build messages, services or actions from within this## package, follow these steps:## * Let MSG_DEP_SET be the set of packages whose message types you use in## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).## * In the file package.xml:## * add a build_depend tag for "message_generation"## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET## * If MSG_DEP_SET isn't empty the following dependency has been pulled in## but can be declared for certainty nonetheless:## * add a run_depend tag for "message_runtime"## * In this file (CMakeLists.txt):## * add "message_generation" and every package in MSG_DEP_SET to## find_package(catkin REQUIRED COMPONENTS ...)## * add "message_runtime" and every package in MSG_DEP_SET to## catkin_package(CATKIN_DEPENDS ...)## * uncomment the add_*_files sections below as needed## and list every .msg/.srv/.action file to be processed## * uncomment the generate_messages entry below## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)## Generate messages in the 'msg' folder# add_message_files(# FILES# Message1.msg# Message2.msg# )## Generate services in the 'srv' folder# add_service_files(# FILES# Service1.srv# Service2.srv# )## Generate actions in the 'action' folder# add_action_files(# FILES# Action1.action# Action2.action# )## Generate added messages and services with any dependencies listed here# generate_messages(# DEPENDENCIES# std_msgs# )################################################## Declare ROS dynamic reconfigure parameters #################################################### To declare and build dynamic reconfigure parameters within this## package, follow these steps:## * In the file package.xml:## * add a build_depend and a run_depend tag for "dynamic_reconfigure"## * In this file (CMakeLists.txt):## * add "dynamic_reconfigure" to## find_package(catkin REQUIRED COMPONENTS ...)## * uncomment the "generate_dynamic_reconfigure_options" section below## and list every .cfg file to be processed## Generate dynamic reconfigure parameters in the 'cfg' folder# generate_dynamic_reconfigure_options(# cfg/DynReconf1.cfg# cfg/DynReconf2.cfg# )##################################### catkin specific configuration ####################################### The catkin_package macro generates cmake config files for your package## Declare things to be passed to dependent projects## INCLUDE_DIRS: uncomment this if you package contains header files## LIBRARIES: libraries you create in this project that dependent projects also need## CATKIN_DEPENDS: catkin_packages dependent projects also need## DEPENDS: system dependencies of this project that dependent projects also needcatkin_package(# INCLUDE_DIRS include# LIBRARIES my_stage# CATKIN_DEPENDS roscpp std_msgs# DEPENDS system_lib)############# Build ############### Specify additional locations of header files## Your package locations should be listed before other locations# include_directories(include)include_directories( ${catkin_INCLUDE_DIRS})## Declare a C++ library# add_library(my_stage# src/${PROJECT_NAME}/my_stage.cpp# )## Add cmake target dependencies of the library## as an example, code may need to be generated before libraries## either from message generation or dynamic reconfigure# add_dependencies(my_stage ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})## Declare a C++ executable add_executable(my_stage src/my_stage.cpp)## Add cmake target dependencies of the executable## same as for the library above# add_dependencies(my_stage_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})## Specify libraries to link a library or executable target against target_link_libraries(my_stage ${catkin_LIBRARIES} )############### Install ################ all install targets should use catkin DESTINATION variables# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html## Mark executable scripts (Python etc.) for installation## in contrast to setup.py, you can choose the destination# install(PROGRAMS# scripts/my_python_script# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}# )## Mark executables and/or libraries for installation# install(TARGETS my_stage my_stage_node# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}# )## Mark cpp header files for installation# install(DIRECTORY include/${PROJECT_NAME}/# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}# FILES_MATCHING PATTERN "*.h"# PATTERN ".svn" EXCLUDE# )## Mark other files for installation (e.g. launch and bag files, etc.)# install(FILES# # myfile1# # myfile2# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}# )############### Testing ################# Add gtest based cpp test target and link libraries# catkin_add_gtest(${PROJECT_NAME}-test test/test_my_stage.cpp)# if(TARGET ${PROJECT_NAME}-test)# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})# endif()## Add folders to be run by python nosetests# catkin_add_nosetests(test)
package.xml文件
<?xml version="1.0"?><package> <name>my_stage</name> <version>0.0.0</version> <description>The my_stage package</description> <!-- One maintainer tag required, multiple allowed, one person per tag --> <!-- Example: --> <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --> <maintainer email="unicorn@todo.todo">unicorn</maintainer> <!-- One license tag required, multiple allowed, one license per tag --> <!-- Commonly used license strings: --> <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 --> <license>TODO</license> <!-- Url tags are optional, but mutiple are allowed, one per tag --> <!-- Optional attribute type can be: website, bugtracker, or repository --> <!-- Example: --> <!-- <url type="website">http://wiki.ros.org/my_stage</url> --> <!-- Author tags are optional, mutiple are allowed, one per tag --> <!-- Authors do not have to be maintianers, but could be --> <!-- Example: --> <!-- <author email="jane.doe@example.com">Jane Doe</author> --> <!-- The *_depend tags are used to specify dependencies --> <!-- Dependencies can be catkin packages or system dependencies --> <!-- Examples: --> <!-- Use build_depend for packages you need at compile time: --> <!-- <build_depend>message_generation</build_depend> --> <!-- Use buildtool_depend for build tool packages: --> <!-- <buildtool_depend>catkin</buildtool_depend> --> <!-- Use run_depend for packages you need at runtime: --> <!-- <run_depend>message_runtime</run_depend> --> <!-- Use test_depend for packages you need only for testing: --> <!-- <test_depend>gtest</test_depend> --> <buildtool_depend>catkin</buildtool_depend> <build_depend>roscpp</build_depend> <build_depend>std_msgs</build_depend> <run_depend>roscpp</run_depend> <run_depend>std_msgs</run_depend> <!-- The export tag contains other, unspecified, tags --> <export> <!-- Other tools can request additional information be placed here --> </export></package>
新建在my_stage目录下新建launch文件夹,在luanch文件夹下新建my_stage.launch文件
<launch><node name = "stage" pkg="stage_ros" type = "stageros" args="$(find stage_ros)/world/willow-erratic.world"/><node name = "my_stage" pkg = "my_stage" type = "my_stage"output = "screen" /></launch>
运行:
cd ~/catkin_ws //跳转到工作空间目录catkin_makeroscore roslaunch my_stage my_stage.launch
结果显示:
0 0
- ROS 使用stage进行(LaserScan)激光扫描仿真
- ROS 使用stage进行(LaserScan)激光扫描仿真 51cto
- ROS 模拟激光仿真数据 使用stage进行仿真 在stage中控制两个机器人
- 使用xtion pro live将点云数据变成激光数据(pointcloud to laserscan)
- ROS学习--(十八)使用stage模拟器
- ROS with V-rep (3) 之仿真velodyne16线激光 (ROS学习笔记六)
- (古月居)ROS探索总结(六)使用smartcar进行仿真使用smartcar进行仿真——INDIGO版修正
- ROS探索总结(六)——使用smartcar进行仿真
- ROS探索总结(六)——使用smartcar进行仿真
- 在ROS Kinetic中使用Gazebo 8进行机器人仿真
- ROS(indigo)_turtlebot仿真示例包括stage和gazebo
- [ROS]LaserScan消息的学习
- ROS相机数据转LaserScan
- ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真
- ROS gazebo激光传感器扫描存在部分扫描没有值问题
- SE955 激光扫描头设置 通过SSI串口进行设置
- ubuntu16.04 ros系统下杉川/大族激光的使用笔记
- ROS配置HOKUYO激光
- 大型网站架构之分布式消息队列
- hdu 1714 RedField
- stm 32 IO重映射
- log4j不同的类输出到不同的日志文件中
- OBS源码分析之render_video处理流程
- ROS 使用stage进行(LaserScan)激光扫描仿真
- 百度地图集成——搜索
- Activity 生命周期、、dialog Activity
- ztree实现表格风格的树状结构
- Scrapy爬虫框架抓取中文结果为Unicode编码,如何转换UTF-8编码的解决办法
- JavaScript中__proto__与prototype的关系
- 浅谈Java容器
- PyCharm2017.3专业版注册码
- $_SERVER函数获取的内容解释