Skip to content

Latest commit

 

History

History
executable file
·
232 lines (156 loc) · 9.75 KB

使用说明.md

File metadata and controls

executable file
·
232 lines (156 loc) · 9.75 KB

修改版 px4ctrl 的 Github 地址:A-ppIes/px4ctrlaphasiayc/px4ctrl: Fork from ZJU-FAST-LAB/Fast-Drone-250 (github.com)

B 站修改版的控制效果,可能是参数不对。

px4ctrl 控制器

该文档中给出了一个简易实现版的无人机控制器 px4ctrl,用于无人机的轨迹跟踪控制。

该控制器通过订阅轨迹规划器的规划出的期望轨迹(位置),经过计算将得到期望的姿态,并将期望的姿态发送给飞控执行。

适配 gazebo 仿真需修改的文件

为了使用 Gazebo 仿真器对该项目进行仿真,需要对几个文件进行修改,主要是将几个话题的名称修改为自己的。原本的项目中使用 Vins 作为里程计的来源,其 odom 话题和当前不符。

plan_manage 功能包

文件 single_run_in_exp.launch

  • 修改 odom_topic 话题
<arg name="odom_topic" value="/vins_fusion/imu_propagate"/>
# 修改为
<arg name="odom_topic" value="/mavros/local_position/odom"/>
  • 修改 depth_topic,真实实验时的相机话题为 image_rect_raw,但是 gazebo 中的相机话题为 image_raw
<arg name="depth_topic" value="/camera/depth/image_rect_raw"/>
# 修改为
<arg name="depth_topic" value="/camera/depth/image_raw"/>
  • 添加 odom_visualization 用于轨迹和无人机模型在 rviz 的可视化
<node pkg="odom_visualization" name="drone_$(arg drone_id)_odom_visualization" type="odom_visualization" output="screen">
    <!-- <remap from="~odom" to="drone_$(arg drone_id)_visual_slam/odom"/> -->
    <remap from="~odom" to="$(arg odom_topic)"/>
    <param name="color/a" value="1.0"/>    
    <param name="color/r" value="0.0"/>        
    <param name="color/g" value="0.0"/>        
    <param name="color/b" value="0.0"/>       
    <param name="covariance_scale" value="100.0"/>       
    <param name="robot_scale" value="1.0"/>
    <param name="tf45" value="false"/>
    <param name="drone_id" value="drone_id"/>
</node>

文件 advanced_param_exp.xml

  • 参数 grid_map/pose_type 说明。其值为 1 时,建图采用 depthPoseCallback 回调函数,一般在 rviz 仿真中使用;其值为 2 时,建图采用 depthOdomCallback 回调函数,一般在实机或 Gazebo 仿真中使用;
<param name="grid_map/pose_type"     value="2"/>  

(1)采用其值为 1 时,建图采用 depthPoseCallback 回调函数,一般在 rviz 仿真中使用。此时其建图采用的两个话题为 camera_pose_topic 和 depth_topic

<arg name="camera_pose_topic" value="pcl_render_node/camera_pose"/>
<arg name="depth_topic" value="pcl_render_node/depth"/>

(2)其值为 2 时,建图采用 depthOdomCallback 回调函数,一般在实机或 Gazebo 仿真中使用。此时其建图采用的两个话题为 odometry_topic 和 depth_topic

<arg name="odometry_topic" value="$(arg odom_topic)"/>

<!-- depth topic: depth image, 640x480 by default -->
<!-- don't set cloud_topic if you already set these ones! -->
<arg name="camera_pose_topic" value="nouse1"/>
<arg name="depth_topic" value="/camera/depth/image_rect_raw"/>

px4ctrl 功能包

文件 crtl_param_fpv.yaml

  • 将 use_bodyrate_ctrl 设为 false
  • 修改 rc_reverse
rc_reverse: 
    roll: false
    pitch: false
    yaw: false
    throttle: true
  • 修改 auto_takeoff_land 中 no_RC
auto_takeoff_land:
    enable: true
    enable_auto_arm: true
    no_RC: true # set true when sim, set false in exp
    takeoff_height: 1.0 # m
    takeoff_land_speed: 0.3 # m/s

文件 run_node.launch

  • 修改 odom,订阅的里程计消息
<remap from="~odom" to="/vicon_imu_ekf_odom" />
# 修改为
<remap from="odom" to="/mavros/local_position/odom" />
  • 修改 cmd,订阅的规划出的位置轨迹。该消息为traj_server节点发布的期望位置消息。除了在该文件中修改cmd话题这种方法外,也可以在启动traj_server节点的launch文件中,通过remap,将/positon_cmd映射到/planning/pos_cmd
<remap from="cmd"  to="/planning/pos_cmd" />
# 修改为
<remap from="cmd"  to="/position_cmd" />
  • 删掉 group 标签,里面的内容保留
<group ns ="iris_0">
	XXXXX
</group>

这里不删的话,控制器的话题前面都会有一个前缀,导致和其他节点的话题无法匹配。可能会初始该控制器中,Unable to connnect PX4!!! 的错误提示。

Gazebo 仿真使用说明

使用流程

使用 Gazebo 完成仿真,一共需要开启 5 个终端。

  • 终端 1:启动 px4 仿真环境,包括 mavros 及 Gazebo,需要在 px4 环境变量生效空间下,或将 px4 环境变量写入 .bashrc 文件中
roslaunch px4 mavros_obs_sitl.launch

说明:mavros_obs_sitl.launch 不是 px4 自带的,是在文件 mavros_posix_sitl.launch 基础上,稍微添加了一些内容得到,修改如下:

<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>
替换为
<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris_depth_camera/iris_depth_camera.sdf"/>
  • 终端 2:启动规划、建图程序,需要在当前程序的工作空间下
source devel/setup.bash
roslaunch ego_planner single_run_in_exp.launch
  • 终端 3:启动 rviz 可视化界面
source devel/setup.bash
roslaunch ego_planner rviz.launch
  • 终端 4:启动 px4ctrl 控制模块,用于接收轨迹规划器的规划的位置路径,并将计算的期望姿态发给飞控
source devel/setup.bash
roslaunch px4ctrl run_ctrl.launch

说明:在修改版的 px4ctrl 或 B 站版的文件中,启动的程序是 run_node.launch

控制器需要 imu 的频率在 100hz 以上,需通过在终端中输入命令提高 mavros 传输的飞控信息频率。新开一个终端,在其中输入

# 10000是时间间隔,单位微秒,即10000us=0.1s
# 10000是将频率提高到100hz,若改成5000则提高到200hz
rosrun mavros mavcmd long 511 31 10000 0 0 0 0 0
rosrun mavros mavcmd long 511 32 10000 0 0 0 0 0

可以把这 2 条命令写入 launch 文件中,减少输入工作量。但是注意,需要再开启 mavros 以后,再输入这 2 个命令。

  • 终端 5:打开动态调参界面。原版程序更适合于实机飞行,在仿真中建议使用修改版的程序,更适宜操作。修改版程序使用时,需要打开动态调参工具的界面,实现 offboard 模式的切换。

使用说明: (1)先用 QGC 手动控制无人机起飞到一定高度后悬停; (2)点击 mode_bool,可以注意到 px4ctrl 的终端中输出状态,切换到 Auto Hover;同时,QGC 界面上,切换到 offboard 状态; (3)点击 cmd_bool; (4)在 rviz 上指定目标点,然后无人机应该开始正常跟踪轨迹;

Gazebo 仿真可能出现的问题

建图的起飞原点处存在障碍物

在 rviz 中可能会观察到,在无人机在起飞点的原点处存在一坨障碍物,这可能是某些参数没有设置好。通过将单独的 ego planner 项目中的代码,替换本项目中的代码,该问题即可得到解决。

实际飞行中的一些问题说明

Q:为啥运行 px4ctrl 后,在通过遥控器切换状态,无法使用 takeoff 脚本起飞?

通过阅读控制器的状态机代码,可以看出只有从 manual_ctrl 状态能够切换到 takoff 状态。在启动 px4ctrl 节点前将遥控器摇杆拨到预定状态,此时能够保证控制器仍处于 manual_ctrl 状态;但是若是启动 px4ctrl 节点后再将遥控器摇杆拨到预定状态,则会导致状态机跑到了 cmd_ctrl 状态或 auto_hover 状态,而此时是无法使用 takeoff 脚本的。

Q:为啥不能手动解锁了?

在启动 px4ctrl 且遥控器拨杆已经到位的情况下,飞控此时处于 offboard 状态,所以遥控器无法正常解锁。若是将 5 通道,拨回去,则会退出 offboard,遥控器此时就能正常使用了。

5通道: 切换px4ctrl控制(Offboard模式)或飞控的原飞行模式
6通道: 是否允许px4ctrl接收你的代码发给px4ctrl的控制指令

Q:紧急状态说明

任何模式下将5通道拨出定点模式,飞机将立刻退回到手控模式,指令控制模式下将6通道拨离该模式,飞机会退到定点模式。各个消息还有超时机制,odom、imu、rc等超时会退出到手动控制模式,command超时会退出到定点模式。

  • 若定位没有漂移,只是规划程序出问题,优先将 6 通道 拨出,此时无人机将处于定点模式下的悬停状态;
  • 若定位已经漂移,立刻将 5通道 拨出,此时需要在姿态模式下,控制无人机安全降落,需要提前联系穿越进的操控;
  • 若是出现紧急情况,直接 7通道 拨出,直接紧急刹车,但此时飞机极有可能坠毁,出现较大经济损失,但比撞人好;

Q:无人机在转向时出现 VINS 较大漂移

这套程序确实存在 yaw 角变化过快的问题。可以在轨迹发送 traj_server.cpp 文件中限制 yaw 角变化速度。

在文件 traj_server.cpp 文件中可以通过参数 max_yaw_change 来限制无人机运动过程中转角速度过快。若实际中转角速度过快,则可以通过将修改该参数,乘上一个缩放系数,形如 $max_yaw_change \times 0.8$ ,或其他的系数(0.7、0.65 等等)来实现。

该角度变化过快会导致 vins 定位失效。一般不建议,直接发送一个反方向的目标点,避免直接出现 180°的掉头操作。