1 新建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
2 新建功能包
cd ~/catkin_ws/src
catkin_create_pkg msgtest std_msgs roscpp
3 新建msg文件
cd ~/catkin_ws/src/msgtest/
mkdir msg
cd msg/
vim msg1.msg
在msg1.msg中写入以下内容:
int32 num
string str
4 新建发布文件pub.cpp
cd ~/catkin_ws/src/msgtest/src
vim pub.cpp
写入以下内容:
#include "ros/ros.h"
#include "msgtest/msg1.h"
int main(int argc, char **argv)
{
ros::init(argc, argv, "msgpub");
ros::NodeHandle n;
ros::Publisher msg_pub = n.advertise<msgtest::msg1>("mymsg", 1000);
ros::Rate loop_rate(10);
while (ros::ok())
{
msgtest::msg1 msg;
msg.num = 1024;
msg.str = "hello slam";
msg_pub.publish(msg);
ROS_INFO("Publish : number = %d string = %s", msg.num, msg.str.c_str());
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
5 新建订阅文件sub.cpp
cd ~/catkin_ws/src/msgtest/src
vim sub.cpp
写入以下内容:
#include "ros/ros.h"
#include "msgtest/msg1.h"
void chatterCallback(const msgtest::msg1::ConstPtr& msg)
{
ROS_INFO("I heard: [num = %d, string = %s]", msg->num, msg->str.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "msgsub");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("mymsg", 1000, chatterCallback);
ros::spin();
return 0;
}
6 修改配置文件
CMakelists.txt
cd ~/catkin_ws/src/msgtest/
vim CMakeLists.txt
在文件中第13行处添加上message_generation:
find_package(catkin REQUIRED COMPONENTS
std_msgs
roscpp
message_generation
)
将50行处注释取消掉, 并且按照下面代码修改:
add_message_files(
FILES
msg1.msg
)
将70行处注释取消掉,如下:
generate_messages(
DEPENDENCIES
std_msgs
)
在文件最后添加如下代码:
add_executable(msgpub src/pub.cpp)
target_link_libraries(msgpub ${catkin_LIBRARIES})
add_executable(msgsub src/sub.cpp)
target_link_libraries(msgsub ${catkin_LIBRARIES})
package.xml
cd ~/catkin_ws/src/msgtest/
vim package.xml
在58行之后加入:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
7 编译并运行
cd ~/catkin_ws/
catkin_make
roscore
新建一个终端:
source ~/catkin_ws/devel/setup.bash
rosrun msgtest msgpub
再新建一个终端:
source ~/catkin_ws/devel/setup.bash
rosrun msgtest msgsub
大功告成:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)