在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++发布者。
验证消息是否成功发布
您可以使用如下命令来查看当前话题以及订阅相关数据:
查看所有话题:
rostopic list
查看特定话题的数据(例如
/chatter
):rostopic echo /chatter
这将显示由您的发布者节点发送的信息。
希望这些步骤能帮助您成功地在ROS中发布消息!如有任何问题,请随时询问!
内容由零声教学AI助手提供,问题来源于学员提问