无人机定点飞行-介绍 基础知识必备我们先了解ROS的机制发布者(pub) ──发消息──▶ 话题 /yolo_msg ──收消息──▶ 订阅者(sub)还需要清楚目录的结构catkin_ws/└── src/└── drone_planner/ # 任意命名├── package.xml├── CMakeLists.txt├── msg/│ └── drone_planner_msg.msg # 自定义消息定义 需要自己来写└── src/├── pub_msg.cpp # 发布者└── sub_msg.cpp # 订阅者新增注意roscore才能启动rosrun,但是roslaunch 本身包含了roscore了所以这里不需要再roscore了清楚这个就好办了那么我们先写一个发布者如下操作发布话题第一步先写个程序新建src下命名为pub_msg.cpp把下面程序复制过来。#include ros/ros.h#include drone_planner/drone_msg.hint main(int argc, char **argv){//ROS节点初始化节点名pub_cmd_velros::init(argc,argv,drone_pub);//创建节点句柄管理ROS API资源、调用ros::NodeHandle n;//创建一个Publisher发布名为/turtle1/cmd_vel的topic消息类型为geometry_msgs::Twist队列长10ros::Publisher drone n.advertisedrone_planner::drone_msg(/drone_pub,10);//设置循环频率不断publishros::Rate loop_rate(10);while (ros::ok()){//初始化geometry_msgs::Twist类型消息drone_planner::drone_msg abc;abc.name name;abc.x 2;abc.y 3;//发布消息drone.publish(abc);//ROS_INFO(Publish turtle velocity command[%.2f m/s, %.2f rad/s], vel_msg.linear.x, vel_msg.angular.z);//按照循环频率延时loop_rate.sleep();}return 0;}第二步在drone_planner文件夹下有个msg文件夹创建一个名字叫drone_msg.msg文件这里任意命名在这个msg文件中复制如下内容# 这是自定义消息的定义文件每行定义一个字段string name # 字符串类型的名字int32 x # 整数 x 坐标int32 y # 整数 y 坐标第三步去找drone_planner文件夹下的Cmake.list这个文件进行修改为什么这个文件也要进行修改呢答普通包只用 ROS 自带的消息如std_msgs但你的包里有自己的drone_msg.msg。编译时要先把这个 .msg 变成 C 头文件这个步骤必须手动写进 CMakeLists否则程序里#include drone_planner/drone_msg.h会找不到文件。操作181行处enter腾出空间复制下面这个add_executable(可执行名 src/源文件名.cpp) target_link_libraries(可执行名 ${catkin_LIBRARIES})可执行名换做CPP的文件名字以及在75行处回车添加下面内容添加的是msg的add_message_files(FILESdrone_msg.msg)generate_messages(DEPENDENCIESstd_msgs)第四步跟我这个图片一致就行结果来啦终端进入catkin_ws下catkin_make下先是编译因为自己定义的消息类型需要source devel/setup.bash下接着开启新终端如图片另一个终端再开一个终端看下我们发布的话题有哪些终端这时候显示了我们成功发布话题了。定点飞行程序定点飞行的核心程序如下最终效果如下飞到指定的点以上不懂可私信我培训相应无人机仿真视频