一个关于ROS工程建立的简例(消息的自定义与节点的发布和订阅)

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值