ubuntu:16.04
新建 ROS 工程,两个节点: node_a 和 node_b。其中,node_a 负责每隔一定时间发送一个数字, node_b 负责接收数字并显示数字,通过 roslaunch 运行这两个 node 。
打开终端创建一个 ROS 工作环境
mkdir -p ros_ws/src
cd ros_ws/
catkin_make
编译成功后,打开目录,会出现如下文件夹
source devel/setup.bash
也可以将 source devel/setup.bash 直接添加在~/.bashrc 文件中,这样可以在任何目录下运行项目,也不用每次都加载环境变量。
vim ~/.bashrc
在文件尾添加完成路径如下:
source /home/stoner/ros_ws/devel/setup.bash
保存并退出
输出环境变量,若终端中输出已添加的路径,则添加成功
echo $ROS_PACKAGE_PATH
使用 catkin_create_pkg 创建一个 package 包并添加 roscpp 和 std_msgs 依赖 项
cd ~/ros_ws/src
catkin_create_pkg pub_sub_test roscpp std_msgs
创建成功系统会在 ~ros/src/pub_sub_test 目录下, 生成如下文件及文件夹。
进入到目录 ~ros/src/pub_sub_test/src 下,创建 publisher.cpp 和 subscriber.cpp
touch publisher.cpp
touch subscriber.cpp
文件 publisher.cpp 内容如下
#include "ros/ros.h"
#include "std_msgs/Int32.h"
int main(int argc, char **argv)
{
ros::init(argc, argv, "publisher");
ros::NodeHandle n;
ros::Publisher pub = n.advertise<std_msgs::Int32>("num", 1000);
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
std_msgs::Int32 msg;
msg.data = count;
ROS_INFO("node_a : %d", msg.data);
pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
文件 subscriber.cpp 内容如下
#include "ros/ros.h"
#include "std_msgs/Int32.h"
void chatterCallback(const std_msgs::Int32::ConstPtr& msg)
{
ROS_INFO("node_b : %d\n", msg->data);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "subscriber");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("num", 1000, chatterCallback);
ros::spin();
return 0;
}
使用 catkin_create_pkg 创建 launch 包,不添加任何依赖项
catkin_create_pkg launch
进入 ~/ros_ws/src/launch 目录,创建 run.launch 文件
touch run.launch
文件 run.launch 内容如下
<launch>
<node pkg="pub_sub_test" name = "node_a" type = "publisher" output="screen" />
<node pkg="pub_sub_test" name = "node_b" type = "subscriber" output="screen" />
</launch>
打开 ~ros_ws/src/pub_sub_test 目录下 CMakelists.txt 文件 , 在 151 行之后添加内容
add_executable(publisher src/publisher.cpp)
target_link_libraries(publisher ${catkin_LIBRARIES})
add_executable(subscriber src/subscriber.cpp)
target_link_libraries(subscriber ${catkin_LIBRARIES})
回到 ~ros_ws 目录, 编译项目
catkin_make
编译成功后即可运行
roslaunch launch run.launch
可以使用 rqt_graph 查看节点见关系
rqt_graph