ROS基础学习4-发布者publisher编程实现
我发布的主题叫test,.cpp文件叫publisher_test
创建功能包
创建发布者代码
创建新的cpp文件:touch main.cpp
功能包一定放在工作空间的src路径下 ,功能包的功能实现文件.cpp文件放在功能包src路径下
在功能包的src文件里可以放入各种功能代码如cpp文件
驱动小乌龟运行的一个示例代码:
// 引入ROS核心头文件,提供ROS节点、话题通信等基础功能 #include <ros/ros.h> // 引入几何消息类型头文件,对应速度控制的 Twist 类型 #include <geometry_msgs/Twist.h> // 主函数:ROS节点入口 int main(int argc, char **argv) { // 1. 初始化ROS节点 // 参数:argc/argv(命令行参数)、节点名称(唯一)、匿名命名可选 ros::init(argc, argv, "velocity_publisher"); // 2. 创建ROS节点句柄 // 节点句柄是ROS操作的核心,用于创建发布者、订阅者等 ros::NodeHandle n; // 3. 创建发布者(Publisher) // 作用:向指定话题发布消息 // 参数:话题名("/turtle1/cmd_vel")、消息类型(geometry_msgs::Twist)、队列长度(10) ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10); // 4. 设置循环发布频率(10Hz = 每秒发布10次) ros::Rate loop_rate(10); // 初始化计数变量(可控制发布次数,这里无强制限制,循环持续) int count = 0; // 5. 循环发布消息(ROS节点未关闭时持续运行) while (ros::ok()) { // 6. 初始化速度控制消息 // geometry_msgs::Twist 是ROS标准速度消息,包含线速度和角速度 geometry_msgs::Twist vel_msg; // 线速度x轴:控制乌龟前后移动(正值向前,负值向后),这里设0.5 m/s vel_msg.linear.x = 0.5; // 角速度z轴:控制乌龟旋转(正值逆时针,负值顺时针),这里设0.2 rad/s vel_msg.angular.z = 0.2; // 7. 发布消息到话题 turtle_vel_pub.publish(vel_msg); // 8. 打印日志信息(终端输出发布状态) ROS_INFO("Publish velocity: linear.x=%.2f, angular.z=%.2f", vel_msg.linear.x, vel_msg.angular.z); // 9. 按照设定频率休眠(保证10Hz的发布频率) loop_rate.sleep(); // 计数递增(可选,用于监控循环次数) count++; } // 节点正常退出 return 0; }配置发布者代码编译规则
配置cmakelists.txt中的编译规则
编译内容放在build条目下:
add_executable(publisher_test src/publisher_test.cpp)
target_link_libraries(publisher_test ${catkin_LIBRARIES})
第一行描述把 .cpp编译成什么样的可执行文件
第二行链接ros和库
编译并运行发布者
编译要回到工作空间的根目录下:用catkin_make编译
source devel行在设置环境变量,必须进行。为了方便,直接利用:
Ctrl+h显示隐藏文件,在最最最主目录下.bashrc中设置工作空间环境变量
Ros执行python文件时,要右键属性确定是否是可执行文件
