1.编写 ROS 速度发布节点
1.打开上次的turtle_msg_test package包的src目录 创建并编写turtle_vel_pob.cpp文件
cd ~/catkin_ws/src/turtle_msg_test/src
gedit turtle_vel_pub.cpp
#include <ros/ros.h>
// 速度消息头文件,控制乌龟移动必须引入
#include <geometry_msgs/Twist.h>
int main(int argc, char **argv)
{
// 1.初始化ROS节点,命名速度发布节点
ros::init(argc, argv, "turtle_vel_pub_node");
// 创建节点句柄,和roscore通信
ros::NodeHandle n;
// 2.创建发布者对象
// 模板参数<geometry_msgs::Twist>:发布消息类型
// "/turtle1/cmd_vel":乌龟接收速度指令的话题
// 10:消息缓存队列长度
ros::Publisher pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
// 3.设置发布频率:1Hz,1秒发送1次速度指令
ros::Rate rate(1.0);
ROS_INFO("速度发布节点启动成功,乌龟将自动向前直行");
// 4.循环持续发布消息,ros::ok()判断节点是否正常运行
while(ros::ok())
{
// 定义Twist速度消息结构体
geometry_msgs::Twist vel_msg;
// 线速度:控制前后移动,x轴向前
vel_msg.linear.x = 0.5;
vel_msg.linear.y = 0.0;
vel_msg.linear.z = 0.0;
// 角速度:控制旋转,z轴旋转
vel_msg.angular.x = 0.0;
vel_msg.angular.y = 0.0;
vel_msg.angular.z = 0.0;
// 把速度消息发布到话题
pub.publish(vel_msg);
// 打印当前下发的速度值,方便调试
ROS_INFO("下发速度:linear.x = %.3f", vel_msg.linear.x);
// 根据1Hz频率休眠,控制发送间隔
rate.sleep();
}
return 0;
}
2.在package.xml 添加geometry_msgs 依赖
cd ..
gedit package.xml
<build_depend>geometry_msgs</build_depend>
<exec_depend>geometry_msgs</exec_depend>

3.修改 CMakeLists.txt 添加geometry_msgs库
gedit CMakelists.txt
在 find_package 组件里添加 geometry_msgs
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
turtlesim
geometry_msgs
)
文件下方同时保留订阅、发布两段编译规则:
add_executable(turtle_vel_pub_node src/turtle_vel_pub.cpp)
target_link_libraries(turtle_vel_pub_node
${catkin_LIBRARIES}
)
4.编译,刷新环境变量
cd ~/catkin_ws/
catkin_make
source ~/catkin_ws/devel/setup.bash
2.多终端分开运行,验证完整功能
1.打开roscore
roscore
2.启动乌龟仿真界面
rosrun turtlesim turtlesim_node
3.启动速度发布节点
rosrun turtle_msg_test turtle_vel_pub_node
4.启动坐标订阅节点
rosrun turtle_msg_test turtle_pose_sub_node
启动后乌龟一直沿一个方向移动 一秒刷新一次数据

网硕互联帮助中心





评论前必须登录!
注册