1.工作空间的建立
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws catkin_make
2.创建功能
cd ~/catkin_ws/src catkin_create_pkg Test1 std_msgs roscpp dependce1....... catkin_make
3.自定义消息类型的声明与配置
3.1:自定义消息类型的声明
在功能包Test1的目录下创建msg文件夹用来储存自身的消息类型,注意ROS中默认其名字必须为msg,具体情况不清楚。在msg文件夹中创建.msg类型文件即为消息类型,如定义一个student类型的消息如下:
gedit student.msg
student.msg中的内容如下即可:
string name
uint8 age
uint32 results
3.2自定义消息的配置
修改功能包Test1中的CMakeLists.txt文件,添加下列函数:
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
message_generation
)
add_message_files(
FILES
msg1.msg
)generate_messages(
DEPENDENCIES
std_msgs
)catkin_package(
CATKIN_DEPENDS message_runtime
)
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
4.节点的发布与订阅
4.1节点的发布函数:这里命名为pub.cpp
#include <iostream>
#include "ros/ros.h"
#include "test1/msg1.h"
#include "std_msgs/Float32.h"
using namespace std;
int main(int argc, char **argv){
ros::init(argc,argv,"pub");
ros::NodeHandle n;
ros::Publisher chatter_pub=n.advertise<test1::msg1>("chatter",1000);
ros::Rate loop_rate(10);
int count = 0;
test1::msg1 msg;
msg.name="jzh";
msg.age=0;
while (ros::ok()){
chatter_pub.publish(msg);
ROS_INFO("%s", msg.name.c_str());
ROS_INFO("%d",msg.age);
count++;
msg.age=count*10;
}
return 0;
}
4.2节点的订阅函数:这里名为为sub.cpp
#include "ros/ros.h"
#include "std_msgs/Float32.h"
#include "test1/msg1.h"
#include <iostream>
using namespace std;
void chatterCallback(const test1::msg1::ConstPtr& msg){
ROS_INFO("%s", msg->name.c_str());
}
int main(int argc,char **argv){
ros::init(argc,argv,"sub");
ros::NodeHandle n;
ros::Subscriber sub=n.subscribe("chatter",1000,chatterCallback);
ros::spin();
return 0;
}
注意ROS中需要把cpp文件链接到编译路径中,依旧是修改功能包Test1中的CMakeLists.txt文件,添加下列代码:
add_executable(pub src/pub.cpp)
target_link_libraries(pub ${catkin_LIBRARIES})
add_dependencies(pub test1_generate_messages_cpp)add_executable(sub src/sub.cpp)
target_link_libraries(sub ${catkin_LIBRARIES})
add_dependencies(sub test1_generate_messages_cpp)
5.功能包的编译
需要将ROS的./bash文件路径添加到~/.bashrc中去,否则运行ROS时会显示找不到功能包,其代码如下:
gedit ~/.bashrc
添加代码:source ~/catkin_ws/devel/setup.bash
最后编译功能包,运行节点代码:
cd ~/catkin_ws
catkin_make
rosrun Test1 pub
rosrun Test1 sub