# go2_nav **Repository Path**: labgps/go2_nav ## Basic Information - **Project Name**: go2_nav - **Description**: 机器狗的自主导航 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-17 - **Last Updated**: 2026-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ROS1 Noetic Unitree Go2 Indoor Navigation Starter 这是一个面向本科生的 ROS1 Noetic 入门包,用标准 ROS 导航接口完成室内建图、路径规划和自主导航。代码位于 `src/go2_nav_ros1`。 ## 1. 系统结构 导航包只依赖四类标准接口: - `/scan`: `sensor_msgs/LaserScan` - `/odom`: `nav_msgs/Odometry` - `/tf`: `map -> odom -> base_footprint -> base_link -> lidar_link` - `/cmd_vel`: `geometry_msgs/Twist` Go2 真机驱动可以来自 Unitree 官方 ROS2/DDS 栈、第三方 ROS1 驱动或自研 UDP/SDK 节点。只要把真机接口适配成上面四个标准 ROS1 话题,本包的建图和导航部分无需修改。 ## 2. 安装依赖 在 Ubuntu 20.04 + ROS Noetic 上执行: ```bash sudo apt update sudo apt install -y \ ros-noetic-navigation \ ros-noetic-slam-gmapping \ ros-noetic-map-server \ ros-noetic-amcl \ ros-noetic-dwa-local-planner \ ros-noetic-navfn \ ros-noetic-robot-state-publisher \ ros-noetic-xacro \ ros-noetic-teleop-twist-keyboard \ ros-noetic-pointcloud-to-laserscan \ ros-noetic-robot-localization ``` ## 3. 编译 ```bash mkdir -p ~/catkin_ws/src cp -r /path/to/nav_robot_dog/src/go2_nav_ros1 ~/catkin_ws/src/ cd ~/catkin_ws chmod +x src/go2_nav_ros1/scripts/*.py catkin_make source devel/setup.bash ``` ## 4. 无真机先跑通 终端 1: ```bash roslaunch go2_nav_ros1 fake_bringup.launch ``` 终端 2: ```bash roslaunch go2_nav_ros1 navigation.launch map_file:=$(rospack find go2_nav_ros1)/maps/demo_empty.yaml ``` 终端 3: ```bash roslaunch go2_nav_ros1 rviz.launch ``` 在 RViz 中用 `2D Pose Estimate` 设初始位姿,再用 `2D Nav Goal` 发目标点。假底盘会订阅 `/cmd_vel`,积分生成 `/odom`,适合课堂演示 move_base 的闭环。 ## 5. 室内建图 真机启动后先确认: ```bash rostopic hz /scan rostopic echo -n 1 /odom rosrun tf tf_echo odom base_footprint ``` 开始 gmapping: ```bash roslaunch go2_nav_ros1 mapping.launch scan_topic:=/scan ``` 用键盘低速遥控建图: ```bash rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/cmd_vel_raw ``` 保存地图: ```bash mkdir -p ~/go2_maps rosrun map_server map_saver -f ~/go2_maps/lab ``` ## 6. 自主导航 ```bash roslaunch go2_nav_ros1 navigation.launch map_file:=$HOME/go2_maps/lab.yaml roslaunch go2_nav_ros1 rviz.launch ``` 在 RViz 中先用 `2D Pose Estimate` 粗略指定机器人在地图中的位置,等待激光与地图对齐后,再用 `2D Nav Goal` 发目标点。 航点巡航示例: ```bash roslaunch go2_nav_ros1 waypoint_nav.launch waypoint_file:=$(rospack find go2_nav_ros1)/config/waypoints_lab.yaml ``` ## 7. Go2 真机适配 如果真机话题不是标准名称,可用适配节点: ```bash roslaunch go2_nav_ros1 go2_standard_interface.launch \ scan_in:=/your_scan \ odom_in:=/your_odom \ cmd_vel_out:=/your_go2_cmd_vel ``` 如果 LiDAR 输出点云: ```bash roslaunch go2_nav_ros1 cloud_to_scan.launch cloud_topic:=/points_raw scan_topic:=/scan ``` 如果 Go2 驱动在 ROS2 中,建议用 `ros1_bridge` 桥接标准消息:`geometry_msgs/Twist`、`sensor_msgs/LaserScan`、`nav_msgs/Odometry`、`tf2_msgs/TFMessage`。Unitree 自定义消息不要直接放进 ROS1 导航链路,先在驱动侧转成标准话题。 ## 8. 调参入口 - 机器人轮廓:`src/go2_nav_ros1/config/costmap_common_params.yaml` - DWA 速度和目标容差:`src/go2_nav_ros1/config/dwa_local_planner_params.yaml` - AMCL 定位:`src/go2_nav_ros1/config/amcl_params.yaml` - gmapping 建图:`src/go2_nav_ros1/config/gmapping_params.yaml` - 安全限速:`src/go2_nav_ros1/launch/safety_filter.launch` 本科实验建议先保持默认速度,确认急停和遥控可靠后再逐步提高速度。 ## 9. 参考资料 - Unitree ROS2 Go2/DDS 支持说明:https://github.com/unitreerobotics/unitree_ros2 - ROS Noetic `move_base` API:https://docs.ros.org/en/noetic/api/move_base/html/index.html - ROS Index `gmapping` 包说明:https://index.ros.org/p/gmapping/ - ROS Noetic `amcl` API:https://docs.ros.org/en/noetic/api/amcl/html/index.html