ZBLOG

ROS 发布消息

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

1. 使用Python发布消息

步骤 1:创建工作空间

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

  1. mkdir -p ~/catkin_ws/src
  2. cd ~/catkin_ws/
  3. catkin_make

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

  1. source devel/setup.bash

步骤 2:创建包

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

  1. cd ~/catkin_ws/src
  2. catkin_create_pkg my_publisher std_msgs rospy

步骤 3:编写发布者代码

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

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

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

  1. #!/usr/bin/env python
  2. import rospy
  3. from std_msgs.msg import String
  4. def talker():
  5. pub = rospy.Publisher('chatter', String, queue_size=10)
  6. rospy.init_node('talker', anonymous=True)
  7. rate = rospy.Rate(10) # 10hz
  8. while not rospy.is_shutdown():
  9. hello_str = "hello world %s" % rospy.get_time()
  10. rospy.loginfo(hello_str)
  11. pub.publish(hello_str)
  12. rate.sleep()
  13. if __name__ == '__main__':
  14. try:
  15. talker()
  16. except rospy.ROSInterruptException:
  17. pass

步骤 4:编译包

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

  1. cd ~/catkin_ws/
  2. catkin_make

步骤 5:运行节点

首先启动 ROS 核心:

  1. roscore

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

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

2. 使用C++发布消息

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

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

  1. cd ~/catkin_ws/src/my_publisher/src/
  2. touch talker.cpp

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

  1. #include "ros/ros.h"
  2. #include "std_msgs/String.h"
  3. int main(int argc, char **argv) {
  4. ros::init(argc, argv, "talker");
  5. ros::NodeHandle n;
  6. ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
  7. ros::Rate loop_rate(10); // 设置频率为10Hz
  8. while (ros::ok()) {
  9. std_msgs::String msg;
  10. std::stringstream ss;
  11. ss << "hello world " << ros::Time::now();
  12. msg.data = ss.str();
  13. ROS_INFO("%s", msg.data.c_str());
  14. chatter_pub.publish(msg);
  15. ros::spinOnce(); // 检查回调函数
  16. loop_rate.sleep(); // 控制循环频率
  17. }
  18. return 0;
  19. }

步骤 2:修改 CMakeLists.txt

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

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

步骤 3:编译和运行

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

  1. cd ~/catkin_ws/
  2. catkin_make

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

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

验证消息是否成功发布

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

  1. 查看所有话题:

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

    1. rostopic echo /chatter

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?