Cmake编译rospkg
记录一下用cmake
和make
来创建rospkg并编译的过程。
1.创建ROS的工作空间
首先,你可以输入以下指令查看自身的工作空间
echo $ROS_PACKAGE_PATH
这条指令可以帮助你查看工作空间,也是使用cmake编译的重要环节。
首先创建一个测试的工作空间
mkdir -p dev/rosbook
然后将创建的路径加入到环境变量中,执行如下的指令
echo "export ROS_PACKAGE_PATH=~/dev/rosbook:${ROS_PACKAGE_PATH}" >> ~/.bashrc
source ~/.bashrc
2.创建一个ROS包
利用下面指令创建一个包
roscreate-pkg [package-name] [depend1] [depend2] [depend3]
例如:
cd ~/dev/rosbook
roscreate-pkg mypackage1 std_msgs roscpp rospy
过一会弹出如下照片:
3. 编辑代码
在include
和src
的文件夹中编辑代码,以ros wiki
的topic
教程为例
建立talker.cpp
和listener.cpp
talker.cpp的代码:
#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle nh;
ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(1.0);
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "Hello World " << count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
count++;
}
return 0;
}
listener.cpp的代码:
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
ros::spin();
return 0;
}
然后在CMakeLists.txt
中添加
rosbuild_add_executable(talker src/talker.cpp) rosbuild_add_executable(listener src/listener.cpp)
然后万事具备了,我们可以建立一个build
,然后用cmake ..
和make
进行编译
4.运行
打开一个新的终端,启动初始化ROS
,执行命令:
roscore
然后再打开一个新的终端,启动talker
节点,执行以下命令:
rosrun mypackage1 talker
最后在新的终端里打开一个新的终端,启动listener
节点,执行以下命令:
rosrun mypackage1 listener
则可以看到运行成功了。