ROS如何创建一个发布者Publisher

首先我们需要在主文件夹创建功能包

先创建一个文件夹

1 mkdir ~/catkin_ws
2 cd /catkin_ws
3 mkdir /src

catkin_ws为我们文件夹的名称

添加工程包需要的依赖

1 cd ~/catkin_ws/src
2 catkin_creat_pkg learning_topic roscpp std_msgs geometry_msgs turtlesim

catkin_create_pkg为创建工程包,learning_topic为工程包的名称,roscpp、std_msgs、geometry_msgs、turtlesim为添加的依赖

返回根文件catkin_ws,然后在根文件中编译

1 cd ~/catkin_ws
2 catkin_make //编译
3 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
#include

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("/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如图所示的位置加入以下代码

ROS如何创建一个发布者Publisher_第1张图片

 具体操作步骤如下:

1 gedit CMakeLists
2 add_executable(veolcity_publisher src/velocity_publisher.cpp)
3 target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

之后我们便可以编译并运行发布者啦,具体的操作如下:

1 cd ~/catkin_ws
2 catkin_make
3 source devel/setup.bash
//打开一个新的终端,运行ros
4 roscore
//再打开一个终端运行小乌龟节点
5 rosrun turtlesim turtlesim_node
//返回编译代码的终端
6 rosrun learning_topic velocity_publisher

运行成功后小乌龟会已线速度为0.5 m/s,角速度为0.2 rad/s做圆周运动

恭喜你完成了发布者的第一步!

你可能感兴趣的:(自动驾驶,人工智能,机器学习,ubuntu)