1、创建工作环境
首先我们需要在主文件夹创建功能包
先创建一个文件夹
mkdir ~/catkin_ws
cd /catkin_ws
mkdir /src
catkin_ws为我们文件夹的名称
添加工程包需要的依赖
cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp std_msgs geometry_msgs turtlesim
catkin_create_pkg为创建工程包,learning_topic为工程包的名称,roscpp、std_msgs、geometry_msgs、turtlesim为添加的依赖
返回根文件catkin_ws,然后在根文件中编译
cd ~/catkin_ws
catkin_make //编译
catkin_make install
编译完成后,我们需要设置环境
1 source devel/setup.bash
2 echo $ROS_PACKAGE_PATH //查看工程包路径
在配置好编译所以需要的环境后,我们便可以开始写代码啦,我使用的是C++来创作发布者。首先我们来了解一下如何实现一个发布者吧。
如何实现一个发布者
1、初始化ROS节点;
2、向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;
3、创建消息数据;
4、按照一定频率循环消息;
在learning_topic/src中创建一个velocity_publisher.cpp文件,并编写程序。以下是C++写的发布者的代码:
#include<ros/ros.h>
#include<geometry_msgs/Twist.h>
int main(int argc, char **argv)
{
//ROS节点初始化
ros::init(argc,argv,"velocity_publisher")
//创建节点句柄
ros::NodeHeadle n;
//创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度为10
ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
//设置循环的频率
ros::Rate loop_rate(10);
int count = 0;
while(ros::ok())
{
//初始化geometry_msgs::Twist类型的消息
geometry_msgs::Twist vel_msg;
vel_msg.linear.x = 0.5;
vel_msg.angular.z = 0.2; //设置小乌龟的线速度和角速度
//发布消息
turtle_vel_pub.publish(vel_msg);
ROS_INFO("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]",vel_msg.linear.x, vel_msg.angular.z); //输出命令,类似于C语言的print
//按照循环频率延时
loop_rate.sleep();
}
return 0;
}
完成代码后我们需要配置CMakeLists.txt的编译规则。让我们了解一下CMakeLists.txt的编译规则吧。
如何配置CMakeLists.txt的编译规则
1、设置需要编译的代码和生成的可执行文件;
2、设置链接库;
我们需要在文件夹learning_topic中的CMakeLists.txt如图所示的位置加入以下代码
具体操作步骤如下:
gedit CMakeLists
add_executable(veolcity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
之后我们便可以编译并运行发布者啦,具体的操作如下:
cd ~/catkin_ws
catkin_make
source devel/setup.bash
//打开一个新的终端,运行ros
roscore
//再打开一个终端运行小乌龟节点
rosrun turtlesim turtlesim_node
//返回编译代码的终端
rosrun learning_topic velocity_publisher
运行成功后小乌龟会已线速度为0.5 m/s,角速度为0.2 rad/s做圆周运动
恭喜你完成了发布者的第一步!