ZBLOG

ROS 发布消息

在ROS(Robot Operating System)中,发布消息是通过创建一个发布者节点来实现的。以下是使用Python和C++两种语言在ROS中发布消息的基本步骤。

1. 使用Python发布消息

步骤 1:创建工作空间

如果您还没有创建工作空间,可以使用以下命令:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

然后,确保设置环境变量:

source devel/setup.bash

步骤 2:创建包

src目录下创建一个新的包。例如,我们可以创建一个名为my_publisher的包,并添加对sensor_msgs依赖的支持:

cd ~/catkin_ws/src
catkin_create_pkg my_publisher std_msgs rospy

步骤 3:编写发布者代码

在您的包目录下,创建一个新的 Python 脚本,如 talker.py

cd ~/catkin_ws/src/my_publisher/scripts
touch talker.py
chmod +x talker.py  # 使脚本可执行

编辑 talker.py 文件并添加以下内容:

#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10)  # 10hz
    
    while not rospy.is_shutdown():
        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

步骤 4:编译包

返回到工作空间根目录并编译你的包:

cd ~/catkin_ws/
catkin_make

步骤 5:运行节点

首先启动 ROS 核心:

roscore

然后,在另一个终端中运行您的发布者节点:

source ~/catkin_ws/devel/setup.bash   # 确保环境已设置好。
rosrun my_publisher talker.py          # 启动发布者。

2. 使用C++发布消息

步骤 1:创建 C++ 发布者代码

在同样的 my_publisher 包中,您可以新建 C++ 源文件,例如 talker.cpp:

cd ~/catkin_ws/src/my_publisher/src/
touch talker.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 n;
    
    ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
    
    ros::Rate loop_rate(10); // 设置频率为10Hz
    
    while (ros::ok()) {
        std_msgs::String msg;

        std::stringstream ss;
        ss << "hello world " << ros::Time::now();
        msg.data = ss.str();

        ROS_INFO("%s", msg.data.c_str());
        
        chatter_pub.publish(msg);
        
        ros::spinOnce(); // 检查回调函数
        
        loop_rate.sleep(); // 控制循环频率 
    }

    return 0;
}

步骤 2:修改 CMakeLists.txt

确保将新添加的源文件包含在 CMakeLists.txt 中,以便进行编译。在您的包目录下找到 CMakeLists.txt, 并进行如下更改:

  • 添加 add_executable(talker src/talker.cpp)
  • 将生成的可执行文件链接到所需的库,例如 target_link_libraries(talker ${catkin_LIBRARIES}).

步骤 3:编译和运行

同样返回到工作空间根目录并编译你的包:

cd ~/catkin_ws/
catkin_make  

然后按照之前相同的方法运行 ROS 核心和您的 C++ 节点:

roscore   # 在一个终端里启动ROS核心。
source ~/catkin_ws/devel/setup.bash   # 确保环境已设置好。
rosrun my_publisher talker               # 启动C++发布者。

验证消息是否成功发布

您可以使用如下命令来查看当前话题以及订阅相关数据:

  1. 查看所有话题:

    rostopic list 
    
  2. 查看特定话题的数据(例如 /chatter):

    rostopic echo /chatter  
    

这将显示由您的发布者节点发送的信息。

希望这些步骤能帮助您成功地在ROS中发布消息!如有任何问题,请随时询问!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20437

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?