系统:Ubuntu16.04 LST
ros版本:kinetic
在home目录下创建名称为ros_test_ws 的工作空间
mkdir -p ros_test_ws/src #新建ros_test_ws/src 目录
cd ros_test_ws/src
catkin_init_workspace
cd .. #退到 ros_test_ws 路径下
catkin_make #编译
source devel/setup.bash #配置暂时的环境变量
echo $ROS_PACKAGE_PATH # 查看刚刚配置的环境变量是否生效
ros package 路径包含有刚刚创建的工作空间目录
创建名称为 my_ros_helloworld_cpluse 的软件包
cd catkin_ws/src # 进入工作空间下的 src 目录 (注意路径!!!)
catkin_create_pkg my_ros_helloworld_cpluse std_msgs rospy roscpp
cd .. #退到 catkin_ws 工作空间路径下
catkin_make #编译软件包
使用CLion IDE 便于后续的大型开发
忽略如下错误 (编译是需要进入 ros_test_ws/src目录下进行 catkin_make 编译的)
创建src/talker.cpp 文件
#include
#include
#include
#include
using namespace std;
int main( int argc, char** argv )
{
// 创建节点
ros::init(argc, argv, "talker_node");
ros::NodeHandle n;
// 发布话题
ros::Publisher talkerPub = n.advertise<std_msgs::String>("chatter", 10);
// 设置发送频率
ros::Rate loop_rate(10);
int count = 0;
while(ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world" <<count; // 将“hello world” 和 count 一起输出到 string流中
msg.data = ss.str(); // String 转为 str 作为消息体的数据
ROS_INFO("%s", msg.data.c_str());
talkerPub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
count ++;
}
return 0;
}
创建src/listener.cpp 文件
#include
#include
#include
using namespace std;
// 定义回调函数
void listener_callback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard : [%s]" , msg->data.c_str()); // String 转为 str字符串
}
int main( int argc, char** argv)
{
// 创建节点
ros::init(argc, argv, "listener_node");
ros::NodeHandle n;
// 订阅话题 以及指定该话题的回调函数
ros::Subscriber listenerSub = n.subscribe("chatter", 10,listener_callback);
ros::spin();
return 0;
}
cmake_minimum_required(VERSION 2.8.3)
project(my_ros_helloworld_cpluse)
## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)
## Declare a catkin package
catkin_package()
## 编译 talker and listener
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(listener
src/listener.cpp
)
target_link_libraries(listener ${catkin_LIBRARIES})
add_executable(talker
src/talker.cpp
)
target_link_libraries(talker ${catkin_LIBRARIES})
在ros_test_ws 目录下 运行 catkin_make 命令编译,生成可执行文件 talker 以及 listener
注意:用echo $ROS_PACKAGE_PATH 查看此工作空间是否在环境变量中
若没有则运行此命令 source ~/ros_test_ws/devel/setup.bash 也可以通过 直接将此命令写入 home目录下的 .bashrc文件中,这样就不需要每次都source ~/ros_test_ws/devel/setup.bash 。因为每打开一个新的终端,都会先加载 .bashrc文件。
确保环境变量加载正确,否则rosrun 找不到 软件包 !!!
开三个终端,分别运行如下命令:
先运行命令 roscore
source ros_test_ws/devel/setup.bash
rosrun my_ros_helloworld_cpluse talker
source ros_test_ws/devel/setup.bash
rosrun my_ros_helloworld_cpluse listener