跳到主要内容

PrometheusV3配置

1.下载PrometheusV3_DDS代码

安装命令如下,建议一行一行执行,如果有问题,能更好找出是哪一步出现问题

#新开终端将代码下载到Home目录下

#下载源代码,指定PrometheusV3_DDS分支,这是专为XRCE_DDS准备的(PX4 - XRCE_DDS - PrometheusV3)

git clone -b PrometheusV3_DDS https://gitee.com/amovlab/Prometheus.git

2.编译源代码

源代码下载完毕后,需要编译,后面才能程序运行起来

#进入Prometheus目录下

cd Prometheus/

#colcon编译common部分,涉及prometheus_msgs和quadrotor_msgs

colcon build --base-paths Modules/common

#如果出现如下图所示

image.png

是因为缺少 pcap 的开发库,可以通过以下命令安装所需的依赖库:

#安装pcap

sudo apt install libpcap-dev

#进入Prometheus目录下

cd Prometheus/

#再colcon编译common部分

colcon build --base-paths Modules/common

#正常情况如下图所示,common部分编译完成
#将Prometheus环境变量加入.bashrc中

echo "source ~/Prometheus/install/setup.bash" >> ~/.bashrc

点击文件夹Home,Ctrl+h 将隐藏的.bashrc文件显示出来,点击打开,正常情况,拉到最下,会显示添加了ROS2,ws_ros2和Prometheus这三个环境变量。如下图所示

注意

.bashrc文件非常重要,请谨慎操作,不要随便删除,Ctrl+h 将隐藏的.bashrc

继续,打开新终端,自动刷新环境变量,下面还需要编译uav_control部分

#类似的uav_control运行也需要一些组件和依赖编译前安装

#该包是 ROS 2 中常用的诊断工具库

sudo apt install ros-humble-diagnostic-updater

# GeographicLib 是一个地理空间计算库

sudo apt install libgeographic-dev
#进入Prometheus目录下

cd Prometheus/

#colcon编译uav_control部分

colcon build --base-paths Modules/uav_control

#正常编译成功如下图所示

3.检查是否安装正确

安装好后,检查方法就是:启动地面站,PX4仿真,XRCE_DDS连接PX4,启动命令如下

#首先桌面启动QGC地面站

#启动PX4仿真
cd PX4-Autopilot
make px4_sitl gz_x500

#启动DDS连接PX4飞控

MicroXRCEAgent udp4 -p 8888

正常情况如下图所示:

image.png

做好上述准备工作之后,就是启动Prometheus控制程序:uav_control

#这条命令就是启动Prometheus控制程序,通过DDS连接PX4飞控获取信息,之后为控制命令发送做准备

ros2 launch prometheus_uav_control uav_control_main_outdoor_launch.py

正常情况如下图所示,程序正常运行会显示,所设置的各个参数值

Screenshot 2024-12-25 120732.png

然后程序尝试通过DDS连接飞控px4,正常情况会连接上PX4飞控获取信息

Screenshot 2024-12-25 120740.png

接着稍等一下,程序设置为从Hold模式自动进入Offboard,然后解锁起飞(这里并不需要使用遥控器,主要考虑是前期重点是command控制部分,暂时不加入遥控器,避免前期复杂化)

Screenshot 2024-12-25 120758.png

无人机会持续悬停,飞行模式Offboard,在command模式下,然后持续显示获取的无人机相关信息,如位置,经纬度,电池等

Screenshot 2024-12-25 120808.png

全过程如视频所示

无人机会一直保持悬停状态,直到用户终止程序“ros2 launch prometheus_uav_control uav_control_main_outdoor_launch.py”,可以Ctrl+c或者直接关闭这个终端

至此PX4,XRCE_DDS,PrometheusV3整个系统联动运行没有问题,通信链路都正常。接下来就是使用uav_command_pub程序来发送控制指令,控制无人机飞行

警告

由于在最新PX4中会检测是否连接遥控器,如果没有连接遥控器,即使在Position定点模式下也无法解锁,所以要运行上述控制程序,需要保持无人机在Hold模式,默认打开是Hold模式,但是如果改变了,在启动Prometheus控制程序前,请手动在QGC地面站中将飞行模式切换为Hold,然后再启动Prometheus控制程序,如下图所示。

image.png

image.png

image.png

在小节“3.部署PrometheusV3”,中启动了PX4,DDS,PrometheusV3的情况下,

无人机处于command状态,悬停等待命令发送

Screenshot 2024-12-25 120808.png

这时候运行uav_command_pub程序,这个程序的作用就是用来让用户发送控制指令,控制无人机飞行

ros2 launch prometheus_uav_control uav_command_pub_launch.py

正常情况运行之后会跳出一个单独的终端显示如下,终端中会显示轨迹控制的相关参数,以及等待输入数字指令来控制无人机如下所示

image.png

image.png

如图所示程序给出提示“Please choose the CMD: 1 for MOVE(XYZ_POS), 2 for MOVE(XYZ_POS_BODY), 3 for CURRENT_POS_HOVER, 4 for LAND, 5 for Trajectory, 6 for MOVE(XYZ_VEL)...”,意味着用户可以输入1-6,6种控制指令,如下列表所示

输入数字指令控制命令
1MOVE(XYZ_POS):无人机将按照ENU惯性系下位置控制飞行
2MOVE(XYZ_POS_BODY):无人机将按照BODY机体系下位置控制飞行
3CURRENT_POS_HOVER:输入指令让无人机在飞行过程中立刻在当前点悬停
4LAND:输入指令让无人机立刻降落
5Trajectory:无人机轨迹控制,输入该指令用户可以控制无人机画圆,绕8等轨迹飞行
6MOVE(XYZ_VEL):无人机将按照ENU惯性系下速度控制飞行

笔记

但其实Prometheus支持的控制模式还有其他,如下图所示,由于时间关系,暂时没有在uav_command_pub中呈现,这个未来随着PrometheusV3的不断更新,也会把下面控制模式加入。如果用户现在有兴趣,可以参考uav_command_pub源程序,加入下面这些控制接口,来控制无人机

image.png

输入数字指令1,无人机将按照ENU惯性系下位置控制飞行,其中ENU惯性系(东北天)坐标系(前左上),ENU惯性系(东北天)是指x轴向东,y轴向北,z轴向上(天),如下图所示

image.png

在这一坐标系下默认Prometheus机头方向为x轴向正东,在上面运行画面中也可以看见无人机默认朝向是朝向正东方,结合右手法则可以很好地知道各个轴在空间中对应方向:右手法则:在三维坐标系中,Z轴的正轴方向是根据右手定则确定的。右手定则也决定三维空间中任一坐标轴的正旋转方向。

要标注X、Y和Z轴的正轴方向,就将右手背对着屏幕放置,拇指即指向X轴的正方向。伸出食指和中指,如下图所示,食指指向Y轴的正方向,中指所指示的方向即是Z轴的正方向。要确定轴的正旋转方向,如下图所示,用右手的大拇指指向轴的正方向,弯曲手指。那么手指所指示的方向即是轴的正旋转方向。

image.png

更详细关于Prometheus使用坐标系的介绍可以看 uav_control坐标系介绍

image.png

当输入1之后,“MOVE in ENU frame, Pls input the desired position and yaw angle”会提示用户继续输入想要控制无人机飞行到点位的xyz以及yaw值,以上面情况为例,当前无人机的位置可以在运行的uav_control终端中看到“[uav_control_main-1] UAV_pos [X Y Z]: 0.381679 [ m ] -4.51966 [ m ] 6.50962 [ m ]”也就是无人机大约在(0,0,6.5)位置,地面站显示无人机朝向正东。那么这时可以示例,输入x=4,y=0,z=6.5,yaw=0,那么无人机将只在x轴上向前朝正东飞行4m然后悬停下来。

image.png

全过程如视频所示

飞行指令发出后可以看到终端显示:“[uav_control_main-1] Command: [ Move in XYZ_POS ] ”,无人机也飞行到指定位置:“UAV_pos [X Y Z]: 4.0447 [ m ] 0.0364566 [ m ] 6.20996 [ m ]”,如下图所示

image.png

类似的在数值指令1下,用户可以随意设置想要飞行的点xyz,以及yaw角,这个用户可以根据需要自由探索。

输入数字指令2,无人机将按照BODY机体系下位置控制飞行,body系(前左上),以无人机当前位置为原点,机头向前方向为x轴,垂直机头90度向左为y轴,垂直xy平面向上为z轴,如下图所示

image.png

Prometheus下BODY机体系和ENU惯性系的区别在于,BODY机体系以无人机当前位置为原点,而ENU惯性系以初始点零点为原点,以上面例子说明数字指令1:MOVE(XYZ_POS)发送指令x=4,y=0,z=6.5,yaw=0,无人机会从原本(0,0,6.5)位置,向东飞行4米到达(4,0,6.5)位置。而BODY系以无人机当前位置(0,0,6.5)为原点,要实现和上面一样的飞行操作,只需要输入MOVE(XYZ_POS_BODY):x=4,y=0,z=0,yaw=0,无人机会从原本(0,0,6.5)位置,向东飞行4米到达(4,0,6.5)位置。就是相当于在当前原点要实现只改变x轴位置,那么其他轴增量为0.具体操作如下图所示

image.png

整体飞行视频如下:

结果如上一样飞行到同样位置,操控的坐标系不同,其对应有不同的特性。用户可以随意设置想要飞行的点xyz,以及yaw角,这个用户可以根据需要自由探索。

image.png

输入数字指令5,支持“Please choose the trajectory type: 0 for Circle, 1 for Eight Shape, 2 for Step, 3 for Line”,四种轨迹控制,如下图所示

image.png

这里以绕圆为例,输入之后,会提示想要无人机按照此轨迹飞行多长时间,多少秒,按照自己需求来就可以,无人机的飞行轨迹在QGC上也可以看见,滚轮放大地图,红色箭头代表无人机,轨迹线红色显示(不过其打印轨迹频率不高,参考就行)

image.png

整体视频如下,其他轨迹模式同理

输入数字指令6,无人机将按照ENU惯性系下速度控制飞行,这个ENU前面讲解了这里就不再赘述。和之前的区别前者是指点位置控制飞行到指定地点,后者是速度控制,给定无人机速度,无人机会按照这个速度持续飞行。例如输入x=0.6,y=0,z=0,yaw=0,那么无人机将会朝x轴正东方向持续按照0.6m/s的速度飞行。

image.png

完整视频如下,用户可以随意设置想要飞行的xyz速度,以及yaw角,这个用户可以根据需要自由探索。

就是让无人机在飞行过程中立刻在当前点悬停,上面的速度控制视频中已经展示,输入该指令后,原本飞行的无人机立刻在当前点悬停

笔记

Prometheus中还支持INIT_POS_HOVER,也就是初始点悬停,类似返航,回到最初悬停点,这个现成接口也可以直接使用,感兴趣用户可以探索

则是直接让无人机降落

注意

PrometheusV3先驱者目前适配了uav_control,其他部分还会陆续适配,在这一过程中难免会出现细节问题或者bug,用户使用中如果发现可以反馈给我们,非常感谢