Ubuntu22.04+Gazebo+PX4开发环境搭建
参考了这篇博客,成功!
最新PX4xROS2保姆级仿真部署教程来了!_ros2 px4-ZEEKLOG博客
安装Ubuntu22.04.5 desktop版 的详细教程:
安装Ubuntu22.04.5 desktop版 的详细教程_ubuntu-22.04.5-desktop-amd64.iso-ZEEKLOG博客
记录学习过程,内容如有问题,还请各位大佬指教。
一、完整打开流程
(1)打开gazebo
cd ~/PX4-Autopilot LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe make px4_sitl gz_x500(2)打开地面站
(3)新建终端运行XRCE_DDS,输入下述命令:
MicroXRCEAgent udp4 -p 8888(4)新建终端,输入下述命令,即可列出当前ROS2环境下的全部话题
ros2 topic list(5)确保PX4仿真,包含地面站和XRCE_DDS连接均已启动。新开终端,运行如下命令:
ros2 run px4_ros_com offboard_control执行后,无人机将自动解锁,旋转 90° 并上升至 5 米高度悬停。
二、 建立共享文件夹
(1)虚拟机设置-启用共享文件夹

(2)进入终端挂载共享文件夹(临时)
vmware-hgfsclient # 运行这个命令查看VMware共享的文件夹名 sudo mkdir -p /mnt/shared_data # 创建挂载点 sudo mount -t fuse.vmhgfs-fuse .host:/shared_data /mnt/shared_data -o allow_other,uid=1000,gid=1000 # 挂载共享文件夹 sudo chmod 777 /mnt/shared_data # 设置权限 ln -sf /mnt/shared_data ~/Desktop/Shared_From_Windows # 创建用户目录下的链接 ln -sf /mnt/shared_data ~/共享文件夹 cd ~/共享文件夹 ls -la (3)打开home就能看到建立的共享文件夹
补充:
上面是建立共享文件夹,但是关机后打开就不能共享了。可以使用 /etc/fstab 自动挂载。
# 首先手动挂载一次(确保共享文件夹正常工作) sudo mkdir -p /mnt/shared_data sudo mount -t fuse.vmhgfs-fuse .host:/shared_data /mnt/shared_data -o allow_other,uid=1000,gid=1000 # 编辑 /etc/fstab 文件 sudo nano /etc/fstab # 在文件末尾添加一行 .host:/shared_data /mnt/shared_data fuse.vmhgfs-fuse allow_other,uid=1000,gid=1000,defaults 0 0 # 保存并退出(按 Ctrl+X,然后按 Y,再按 Enter) # 测试配置是否正确 sudo mount -a # 重启验证 sudo reboot现在再次尝试,关机重启后也能共享文件了。
三、使用 ulog2csv.py(PX4/pyulog)将 .ulg 转为 CSV
我的日志位置:/home/xiaoma/PX4-Autopilot/build/px4_sitl_default/rootfs/log/
pip install pyulog # 安装 ulog2csv <input.ulg> -o <输出目录> 示例:ulog2csv log_001.ulg -o ./csv_output 如果提取特定的数据: ulog2csv log_file.ulg -o ./ekf_csv \ -t sensor_combined \ -t vehicle_air_data \ -t vehicle_magnetometer \ -t vehicle_gps_position \ -t optical_flow \ -t distance_sensor \ -t vehicle_attitude_groundtruth \ -t vehicle_local_position_groundtruth四、安装过程中遇到的问题
1、运行bash ./PX4-Autopilot/Tools/setup/ubuntu.sh,进行到fetching xtensa compilers时卡住,下载很慢很慢。

- 解决方法:注释掉ubuntu.h中的以下几行,跳过下载。
# echo # echo "Fetching Xtensa compilers" # wget -q -P $DIR https://github.com/espressif/crosstool-NG/releases/download/esp-13.2.0_20240530/xtensa-esp-elf-13.2.0_20240530-x86_64-linux-gnu.tar.xz # sudo tar -xf $DIR/xtensa-esp-elf-13.2.0_20240530-x86_64-linux-gnu.tar.xz -C /opt # echo 'export PATH=$PATH:/opt/xtensa-esp-elf/bin/' >> /home/$USER/.bashrc 2、加载gz_x500时报错
# 问题: xiaoma@xiaoma-virtual-machine:~/PX4-Autopilot$ make px4_sitl gz_x500 ninja: error: unknown target 'gz_x500' make: *** [Makefile:227:px4_sitl] 错误 1 # 解决方法: cd ~/PX4-Autopilot # 确保在正确的目录下 make clean # 清理之前的构建 make distclean # 重新配置 make px4_sitl gz_x500_vision3、安装QGC地面站
# 问题: xiaoma@xiaoma-virtual-machine:~$ chmod +x ./QGroundControl-x86_64.AppImage chmod: 无法访问 './QGroundControl-x86_64.AppImage': 没有那个文件或目录 # 解决方法: ls ~/Desktop/QGroundControl*.AppImage # 检查桌面上的文件 chmod +x ~/Desktop/QGroundControl*.AppImage # 设置执行权限 # 启动方法: cd ~/Desktop # 先进入桌面目录 ./QGroundControl-x86_64.AppImage # 然后执行4、创建PX4_msgs_ROS2空间,下载时很慢
# 问题:下载两个官方源代码很慢 git clone https://github.com/PX4/px4_msgs.git git clone https://github.com/PX4/px4_ros_com.git # 解决方法:中国用户建议使用 Gitee 镜像: git clone https://gitee.com/mirrors_PX4/px4_msgs.git # px4_msgs 的 Gitee 镜像 git clone https://gitee.com/mirrors_PX4/px4_ros_com.git # px4_ros_com 的 Gitee 镜像5、PX4仿真运行时有IMU时间戳错误
INFO [tone_alarm] arming warning INFO [commander] Takeoff detected NodeShared::Publish() Error: Interrupted system call ERROR [vehicle_imu] 0 - gyro 1310988 timestamp error timestamp_sample: 292852000, previous timestamp_sampleERROR [vehicle_imu] 0 - accel 1310988 timestamp error timestamp_sample: 292852000, previous timestamp_samplpxh> mavlink start -x INFO [mavlink] mode: Normal, data rate: 2880 B/s on /dev/ttyS1 @ 57600B ERROR [mavlink] ERR GET CONF /dev/ttyS1: -1 ERROR [mavlink] could not open /dev/ttyS1, retrying pxh> ERROR [mavlink] ERR GET CONF /dev/ttyS1: -1 ERROR [mavlink] could not open /dev/ttyS1, retrying ERROR [mavlink] ERR GET CONF /dev/ttyS1: -1 ERROR [mavlink] failed to open /dev/ttyS1 after 3 attempts, exiting! # PX4正在尝试打开串口设备/dev/ttyS1,但在SITL仿真环境中这个设备不存在。# 解决方法: mavlink stop-all # 停止当前失败的MAVLink实例 mavlink start -x -u 14556 -r 4000000 # 使用UDP启动MAVLink(关键参数:-x 表示UDP) mavlink status # 查看状态6、 连接到PX4的MAVLink Shell(param 命令只能在 PX4的MAVLink Shell 中使用。)
(1)打开新终端,执行:
cd ~/PX4-Autopilot ./Tools/mavlink_shell.py localhost:14550(2)查看所有SDLOG参数:param show SDLOG_*,看到以下信息:
pxh> param show SDLOG_* Symbols: x = used, + = saved, * = unsaved x SDLOG_BACKEND [804,1335] : 3 x SDLOG_BOOT_BAT [805,1336] : 0 x SDLOG_DIRS_MAX [806,1337] : 7 x SDLOG_MISSION [807,1338] : 0 x SDLOG_MODE [808,1339] : 1 x + SDLOG_PROFILE [809,1340] : 3 x SDLOG_UTC_OFFSET [810,1341] : 0 x SDLOG_UUID [811,1342] : 1 999/1922 parameters used.执行测试飞行:
commander arm # 解锁无人机 commander takeoff -m 5 # 起飞到5米 sleep 30 # 飞行30秒(执行各种机动) commander land # 降落 commander disarm # 上锁检查生成的日志:/home/xiaoma/PX4-Autopilot/build/px4_sitl_default/rootfs/log/