Livox Mid-360S 在 Ubuntu 虚拟机部署踩坑总结与360s快速启动脚本

这次从零到跑通 Livox Mid-360S,中间反复踩了网络、端口、配置、RViz 显示等坑。
本文记录最终可复现流程,避免重复折腾。


1. 环境信息

  • 宿主机:Windows + VMware
  • 虚拟机:Ubuntu 20.04
  • ROS:Noetic
  • 设备:Livox Mid-360S
  • 开发链路:Livox SDK2 + livox_ros_driver2

2. 关键结论(先看这个)

  1. Mid-360S 必须使用新版工具链:Livox SDK2 + livox_ros_driver2
  2. bind failed 的常见原因是端口冲突:quick_startroslaunch 不能同时跑。
  3. 节点在跑但没有 /livox/... 话题,通常是主机 IP / 雷达 IP / 端口配置不匹配。
  4. RViz 有话题但看不到图,通常是 Fixed Frame 设错(应改为 livox_frame)。

3. 本次实际网络参数(已验证)

  • 雷达 IP:192.168.1.1xxxx为设备SN码的最后两位!!!)
  • 主机 IP:192.168.1.50/24
  • 使用网卡:enxc817f52c4cb8(我电脑没网卡接口,是USB 转网口,你们按照自己的来)

4. 已踩坑记录

4.1 bind failed

现象:

  • Create detection socket failed
  • Init lds lidar failed

根因:

  • 56000 检测端口被其他 Livox 进程占用。

处理:

pkill -f livox_lidar_quick_start || true
pkill -f livox_ros_driver2_node || true
pkill -f livox_lidar_publisher2 || true

4.2 驱动节点只发布 /rosout

现象:

  • rosnode info /livox_lidar_publisher2 仅有 /rosout
  • rostopic list 没有 /livox/lidar

根因:

  • 配置文件中的主机接收 IP 和雷达真实目标地址不一致,导致没有有效点云流进入发布链路。

4.3 RViz 没有点云

现象:

  • PointCloud2 Topic 看似正常,但界面无点云
  • 出现 Transform 错误

处理:

  • Global Options -> Fixed Frame 改为 livox_frame

5. 最终成功判据

以下全部满足即为跑通:

rostopic list | grep -i livox

出现:

  • /livox/imu
  • /livox/lidar

并且:

rosnode info /livox_lidar_publisher2

能看到节点发布上述话题(不再只有 /rosout)。


6. 后续启动流程(可直接复用)

建议按顺序开 4 个终端。

终端 1:ROS Master

source /opt/ros/noetic/setup.bash
source ~/livox_ws/devel/setup.bash
roscore

终端 2:配置网卡

IFACE="enxc817f52c4cb8"
sudo ip link set ens33 down 2>/dev/null || true
sudo ip addr flush dev "$IFACE"
sudo ip addr add 192.168.1.50/24 dev "$IFACE"
sudo ip link set "$IFACE" up
ip -br addr show dev "$IFACE"
ping -c 2 192.168.1.104

终端 3:启动驱动(Mid-360S)

source /opt/ros/noetic/setup.bash
source ~/livox_ws/devel/setup.bash

pkill -f livox_lidar_quick_start || true
pkill -f livox_ros_driver2_node || true
pkill -f livox_lidar_publisher2 || true

roslaunch livox_ros_driver2 msg_MID360s.launch

终端 4:打开 RViz

source /opt/ros/noetic/setup.bash
rviz

RViz 设置:

  • Global Options -> Fixed Frame = livox_frame
  • Add -> By topic -> /livox/lidar

7. 常用排障命令

# 看 livox 话题
rostopic list | grep -i livox

# 看节点发布关系
rosnode info /livox_lidar_publisher2

# 看检测端口是否占用
sudo ss -lunp | grep 56000

# 抓 UDP 包确认数据流
sudo timeout 5 tcpdump -ni enxc817f52c4cb8 -vv udp

8. 参考文档(官方)


如果后续要接 FAST-LIO/建图,建议先把当前流程固化为两个脚本:
net_up_mid360s.sh(配网)和 start_mid360s_ros.sh(驱动+检查),可明显降低重复操作带来的故障概率。

9.固化脚本简化启动流程

mkdir -p ~/robot/scripts

cat > ~/robot/scripts/net_up_mid360s.sh << 'EOF'
#!/usr/bin/env bash
# Livox Mid-360S:USB 网卡静态 IP + 可选关掉 VMware NAT 网卡,避免抢路由
# 用法:chmod +x ~/robot/scripts/net_up_mid360s.sh && ~/robot/scripts/net_up_mid360s.sh
# 改下面变量即可适配你的机器(或用环境变量 MID360_IFACE / MID360_HOST_IP / MID360_LIDAR_IP)

set -euo pipefail

IFACE="${MID360_IFACE:-enxc817f52c4cb8}"
HOST_IP="${MID360_HOST_IP:-192.168.1.50/24}"
LIDAR_IP="${MID360_LIDAR_IP:-192.168.1.104}"
NAT_IFACE="${MID360_NAT_IFACE:-ens33}"

echo "=== Mid-360S 配网 ==="
echo "IFACE=$IFACE  HOST_IP=$HOST_IP  LIDAR_IP=$LIDAR_IP"

sudo ip link set "$NAT_IFACE" down 2>/dev/null || true
sudo ip addr flush dev "$IFACE"
sudo ip addr add "$HOST_IP" dev "$IFACE"
sudo ip link set "$IFACE" up

echo "=== 当前地址 ==="
ip -br addr show dev "$IFACE"
echo "=== 路由 ==="
ip route || true
echo "=== ping 雷达 ==="
ping -c 3 "$LIDAR_IP" || true
EOF

cat > ~/robot/scripts/start_mid360s_ros.sh << 'EOF'
#!/usr/bin/env bash
# Livox Mid-360S ROS 驱动启动(需先有 roscore)
# 放在虚拟机:~/robot/scripts/start_mid360s_ros.sh
# 用法:chmod +x ~/robot/scripts/start_mid360s_ros.sh && ~/robot/scripts/start_mid360s_ros.sh

set -euo pipefail

export ROS_DISTRO="${ROS_DISTRO:-noetic}"

echo "=== 清理旧 Livox 进程(避免 bind failed)==="
pkill -f livox_lidar_quick_start 2>/dev/null || true
pkill -f livox_ros_driver2_node 2>/dev/null || true
pkill -f livox_lidar_publisher2 2>/dev/null || true
sleep 1

echo "=== 检查 roscore(localhost:11311)==="
if ! timeout 2 bash -c 'echo > /dev/tcp/127.0.0.1/11311' 2>/dev/null; then
  echo "错误:11311 端口不通,请先在一个终端运行:"
  echo "  source /opt/ros/noetic/setup.bash && roscore"
  exit 1
fi

source "/opt/ros/$ROS_DISTRO/setup.bash"
source "$HOME/livox_ws/devel/setup.bash"

echo "=== 启动 livox_ros_driver2(Mid-360S) xfer_format=0(RViz 用 PointCloud2)==="
exec roslaunch livox_ros_driver2 msg_MID360s.launch xfer_format:=0
EOF

chmod +x ~/robot/scripts/net_up_mid360s.sh ~/robot/scripts/start_mid360s_ros.sh
ls -la ~/robot/scripts/

这样就有了两个sh固化脚本
/home/l/robot/scripts/net_up_mid360s.sh
/home/l/robot/scripts/start_mid360s_ros.sh

后续启动流程

终端 1:ROS Master

source /opt/ros/noetic/setup.bash
roscore

终端 2:雷达 USB 网卡配网

~/robot/scripts/net_up_mid360s.sh

终端2:启动 Livox 驱动

~/robot/scripts/start_mid360s_ros.sh

终端3:启动看点云rviz

source /opt/ros/noetic/setup.bash
rviz

里把 Fixed Frame 设成 livox_frame,按需加 PointCloud2(话题按你实际为准,例如 /livox/lidar)。