因为网上关于PX4的教程太少了,记录一下
linux运行基础
Linux运行c++需要camke编译,这里不做介绍。
需要创建一个你代码的运行空间
-test_ws
--devel(环境变量)
--build
--src(源文件) -project(对应不同工程)--src(源码)
--inlude
--makelists(指定生成list)
一个工作空间可能有很多工程可以使用
catkin_make -DCATKIN_WHITELIST_PACKAGES="your project name"
指定编译某个工程
PX仿真启动流程
打开三个终端,分别输入
cd 你的PX4目录
make px4_sitl gazebo
这个gazebo仿真环境
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
这个是启动marvours通讯
cd 你的工作空间
source devel/setup.bash #环境配置
rosrun 工程名 生成可执行文件名
这个是与运行你的程序
注意你生成的可执行文件不能叫“test"(hhh,很奇怪我也不知道为啥)
程序介绍
只讲主程序,各种配置我目前也不懂
启动无人机
启动无人机要设计offboard模式,和解锁无人机,应该是要先设置offboard模式,在解锁无人机
while(ros::ok()){
// 无人机状态设定与判断
// 进入while循环后,先循环5s,然后再向客户端发送无人机状态设置的消息
// set_mode_client.call arming_client.call
// 无人机 Offboard enabled && Vehicle armed 后
// 无人机走矩形 每到达一个点停一会
// local_pos_pub.publish(pose);
if(current_state.mode != "OFFBOARD"&&(ros::Time::now() - last_request > ros::Duration(2.0)))
{
last_request = ros::Time::now();
if( set_mode_client.call(offb_set_mode) &&
offb_set_mode.response.mode_sent){
ROS_INFO("Offboard enabled");
}
}
主要运行的部分在while(ros::ok())里
上面的一开始即为设置无人机offboard模式,指令之间发布不能天频繁所以设置了2s延时
else if (!current_state.armed&&(ros::Time::now() - last_request > ros::Duration(2.0)))
{
last_request = ros::Time::now();
if( arming_client.call(arm_cmd) &&
arm_cmd.response.success){
ROS_INFO("Vehicle armed");
}
}
解锁无人机,这里有个问题,解锁无人机前似乎一定要发布一条指令,要不会报错
WARN [commander] Arming denied: Resolve system health failures first
INFO [tone_alarm] notify negative
所以在解锁无人机前应该发布一下指令,这个我放在后面的else里了
无人机控制
else if(current_state.mode == "OFFBOARD"&¤t_state