ROS 学习笔记(3)—— 发布者 publisher 的编程实现

1、模型

在这里插入图片描述

2、创建功能包

在这之前,应先创建ROS工作空间,具体步骤请查看我的另一篇文章《创建ROS工作空间 & 功能包简介》。
命令解释请查看《ROS常用命令》。

cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

3、编写程序

一定要进入到 ~/catkin_ws/src/learning_topic/src/ 里面,而不是 ~/catkin_ws/src ,因为这是本功能包的程序。

cd learning_topic/src/
touch velocity_publisher.cpp

可以看到在 learning_topic/src/ 路径下多了个 velocity_publisher.cpp 文件,双击打开,插入以下代码后保存:(代码解释可以看我的另一篇文章《ROS常用命令》。)

/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char **argv)
{
    
    
    // ROS节点初始化
    ros::init(argc, argv, "velocity_publisher");

    // 创建节点句柄
    ros::NodeHandle 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("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
                vel_msg.linear.x, vel_msg.angular.z);

        // 按照循环频率延时
        loop_rate.sleep();
    }

    return 0;
}

或者使用 gedit velocity_publisher.cpp 命令进行编辑,gedit 编辑器与windows 的记事本的使用方法差不多。当然,也可以使用 vim velocity_publisher.cpp 命令进行编辑,但 vim 编辑器使用方法比较复杂。
在这里插入图片描述

图1. vim 编辑器

vim 编辑器默认为命令模式,按i键可以进入文本编辑模式,并复制以上 c++ 代码如图所示。(请忽略我的路径)

附:vim编辑器快捷键键位图:这里是引用
1、vim 编辑器默认是处于命令模式,若此时输入:wq后回车即可保存文件并退出编辑器,若输入:q!后回车则不保存并退出。命令模式中会区分大小写。按下红色标识的按键都会进入文本编辑模式
2、在命令模式下按下红色标识的按键都会进入文本编辑模式,此模式下就是对文件进行编辑。按esc键进入命令模式

在这里插入图片描述
esc进入命令模式,输入:wq保存退出。(请忽略我的路径)

在这里插入图片描述

4、编译功能包

编译前需要先在 ~/catkin_ws/src/learning_topic/ 下的CMakeLists.txt文件添加两条语句,粘贴位置在## Install ##正上方并ctrl+s保存:

add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${
    
    catkin_LIBRARIES})

在这里插入图片描述
依次输入以下命令:

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore

可通过运行echo $ROS_PACKAGE_PATH命令查看环境变量是否已经设置好

打开一个新终端,开启 turtlesim:

rosrun turtlesim turtlesim_node

再新开启一个终端,运行发布者 publisher 的 cpp 程序:

rosrun learning_topic velocity_publisher

小海龟成功按照程序运动起来:
在这里插入图片描述

PS:编译cpp生成的文件在 home/catkin_ws/devel/lib/learning_topic 下面

因为每次编译后都需要输入一次 source devel/setup.bash 命令来使系统确定环境变量,这样会有点麻烦,下面介绍一个一劳永逸的方法:
回到主目录,按Ctrl+H键(意思是显示隐藏文件),可以看到一个名为.bashrc的文件,双击打开,在最后添加source /home/wyz/catkin_ws/devel/setup.bash(其中wyz应改为你自己的用户名称)。
在这里插入图片描述

在这里插入图片描述
然后重新打开终端即可自动完成source这一步骤。

猜你喜欢

转载自blog.csdn.net/weixin_44415639/article/details/122432184