ROS-消息发布与接收
2017-07-09 17:24
309 查看
节点(Node) 是指 ROS 网络中可执行文件。接下来,我们将会创建一个发布器节点,它将不断的在 ROS 网络中广播消息。
新建msg文件:
新建foo.msg
更改package.xml文件,添加编译和运行依赖:
修改CmakeLists.txt文件:
编译:
编译结果:生成C++代码, 如图:
修改:CmakeLists.txt ,
将相关行取消注释,
改为:
catkin_make 进行编译:
使用指令,只编译该包:
消息发布编写完成。。。
1. 创建软件包
新建包:catkin_create_pkg turtle_move roscpp rospy
新建msg文件:
cd src/turtle_move/ mkdir msg
新建foo.msg
int16 foo
更改package.xml文件,添加编译和运行依赖:
<build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend> <run_depend>message_generation</run_depend>
修改CmakeLists.txt文件:
find_package(catkin REQUIRED COMPONENTS roscpp rospy message_generation ##添加 ) ## Generate messages in the 'msg' folder add_message_files( ##取消注释; 生成消息; FILES # Message1.msg # Message2.msg foo.msg ##添加 ) ## Generate added messages and services with any dependencies listed here generate_messages( #取消注释; DEPENDENCIES std_msgs # Or other packages containing msgs )
编译:
catkin_make
编译结果:生成C++代码, 如图:
2.编写消息发布程序
move_publisher.cpp/* 该程序主要功能: * 1. 初始化ROS系统, * 2.在turtle1/cmd_vel 话题上发布消息; * 3.以每秒10次的频率发布消息; */ * #include<ros/ros.h> #include<geometry_msgs/Twist.h> int main(int argc,char **argv) //int main(int argc, char **argv) // argc表示参数个数,**argv表示参数; { ros::init(argc,argv,"move_publisher"); //参数初始化,节点名称命名为move_publisher,运行过程节点的名称必须唯一; ros::NodeHandle n; //为该进程节点创建一个句柄. 第一个创建的NodeHandle会为节点进行初始化,最后一个销毁的NodeHandle则会释放该节点所用的所有资源; //type,topic;缓冲区大小,即消息池容量为1000,如缓冲区消息大于该容量的时候就会丢弃之前发布的消息; ros::Publisher pub=n.advertise<geometry_msgs::Twist>("turtle1/cmd_vel",1000); geometry_msgs::Twist tw; //实例化该消息; tw.angular.z=2; //赋值,设置线速度/角速度; tw.angular.x=0; tw.angular.y=0; tw.linear.x=2; tw.linear.y=0; tw.linear.z=0; //发布频率,默认构造函数,在此设为10Hz; 会追踪自上一次调用rate.sleep()后时间的流逝,并休眠直到一个频率周期的时间; ros::Rate rate(10); // 发布该消息 while(ros::ok()) //roscpp会默认生成一个SIGINT句柄,负责处理ctrl+C操作,按下时,该句柄会返回False; { pub.publish(tw); // 制定需要发布的消息; ros::spin(); // 在此处固定等待消息进入循环,而ros::spinonce()循环一次后,执行回调函数;如果程序中包含其他的回调函数,则用ros::spinonce(); } rate.sleep(); // 到达指定时间后休眠,使得发布频率为10; }
修改:CmakeLists.txt ,
将相关行取消注释,
###########
## Build ##
###########
## Declare a C++ executable
## Withcatkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
## add_executable(${PROJECT_NAME}_node src/turtle_move_node.cpp)
## Specify libraries to link a library or executable target against
# target_link_libraries(${PROJECT_NAME}_node
# ${catkin_LIBRARIES}
# )
改为:
###########
## Build ##
###########
## Declare a C++ executable
## Withcatkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(move_publisher src/move_publisher.cpp)
## Specify libraries to link a library or executable target against
target_link_libr
4000
aries(move_publisher
${catkin_LIBRARIES}
)
catkin_make 进行编译:
使用指令,只编译该包:
catkin_make -DCATKIN_WHITELIST_PACKAGES="turtle_move"
消息发布编写完成。。。
相关文章推荐
- ROS中节点在每次接收到消息之后都发布一条消息的反馈topic
- ROS(一):使用python创建消息发布及接收node
- ROS实战之节点发布/接收图片
- 树莓派开发板--Linux系统--ROS环境--实现一个简单的消息发布器和订阅器
- ActiveMQ 发布订阅(topic)模式_发送消息和接收消息
- ROS学习笔记——简单的消息发布器和订阅器 (Python版)
- (七)ROS使用OpenCV读取图像并发布图像消息在rviz中显示
- ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)
- ROS教程(十一):编写简单的消息发布器和订阅器
- 创建ROS消息发布器(publisher)、订阅器(subscriber)
- ROS中订阅两个消息,发布一个数据。
- ROS学习笔记--消息发布器和订阅器
- ROS之msg文件定义以及自定义发布主题消息类型
- ROS 编写消息发布器(publisher)和订阅器(subscriber)-精简
- ros自定义动态消息发布(vector)
- ROS教程(十二):测试消息发布器和订阅器
- ROS入门_1.14 编写及测试简单的消息发布器和订阅器 (C++)
- ros同时接收多话题并发布
- ROS消息发布器与接收器(C++)注意事项
- ROS_Kinetic_26 使用rosserial_windows实现windows与ROS master发送与接收消息