第 2 节

环境配置与运行

作者:董佳辉

环境配置与运行

docker(可选)

里面已经配置好了大部分环境:

sudo docker run --name=ysu_ros_humble \
  --gpus all \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  -e DISPLAY=$DISPLAY \
  -dit \
  --privileged \
  --net=host \
  --group-add audio \
  --group-add video \
  --group-add dialout \
  -e XAUTHORITY=$HOME/.Xauthority \
  -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
  -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
  -e QT_QPA_PLATFORM=xcb \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -v /dev:/dev \
  -v $HOME/.Xauthority:$HOME/.Xauthority:ro \
  -v /run/user/$(id -u)/wayland-0:/run/user/$(id -u)/wayland-0 \
  -v /run/user/$(id -u):/run/user/$(id -u) \
  -v $HOME:$HOME \
  -w $HOME \
  tungchiahui/ysu-ros:humble-jammy

YSU克隆配置环境

克隆代码:

git clone https://github.com/tungchiahui/ysu2026_rm_sentry.git

安装small_gicp:

sudo apt install -y libeigen3-dev libomp-dev

git clone https://github.com/koide3/small_gicp.git
cd small_gicp
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release && make -j
sudo make install

安装xmacro和vcstool2:

sudo apt install python3-pip python3-vcstool
pip install xmacro

安装依赖:

cd ./ysu2026_rm_sentry

sudo apt update
rosdep install -r --from-paths src --ignore-src --rosdistro $ROS_DISTRO -y
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

SLAM(建图)

仿真测试

# 手柄
source install/setup.bash
ros2 launch joy_bringup joy_controller_sim.launch.py

# 键盘
## 控制机器人移动
source install/setup.bash
ros2 run rmoss_gz_base test_chassis_cmd.py --ros-args -r __ns:=/red_standard_robot1/robot_base -p v:=0.3 -p w:=0.3

## 机器人云台
ros2 run rmoss_gz_base test_gimbal_cmd.py --ros-args -r __ns:=/red_standard_robot1/robot_base

## 机器人射击
ros2 run rmoss_gz_base test_shoot_cmd.py --ros-args -r __ns:=/red_standard_robot1/robot_base
source install/setup.bash
ros2 launch rmu_gazebo_simulator bringup_sim.launch.py
source install/setup.bash
ros2 launch pb2025_nav_bringup rm_navigation_simulation_launch.py \
  use_sim_time:=True \
  use_joy:=False \
  slam:=True

实物测试

# 手柄
source install/setup.bash
ros2 launch joy_bringup joy_controller.launch.py

# 键盘
source install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
source install/setup.bash
ros2 launch serial_comm serial_comm.launch.py
source install/setup.bash
ros2 launch pb2025_nav_bringup rm_navigation_reality_launch.py \
  use_sim_time:=False \
  use_joy:=False \
  use_robot_state_pub:=True \
  slam:=True \
  use_rviz:=False

导航(开small_gicp)

仿真

source install/setup.bash
ros2 launch rmu_gazebo_simulator bringup_sim.launch.py
source install/setup.bash
ros2 launch pb2025_nav_bringup rm_navigation_simulation_launch.py \
use_sim_time:=True \
use_joy:=False \
slam:=False \
world:=rmuc_2025

实物

source install/setup.bash
ros2 launch serial_comm serial_comm.launch.py
source install/setup.bash
ros2 launch pb2025_nav_bringup rm_navigation_reality_launch.py \
  use_sim_time:=False \
  use_joy:=False \
  use_robot_state_pub:=True \
  use_rviz:=False \
  slam:=False \
  world:=map_name

导航(关small_gicp且静态发布map到odom)

仿真

source install/setup.bash
ros2 launch rmu_gazebo_simulator bringup_sim.launch.py
source install/setup.bash
ros2 launch pb2025_nav_bringup rm_navigation_simulation_static_launch.py \
use_sim_time:=False \
use_joy:=False \
slam:=False \
world:=rmuc_2025

实物

source install/setup.bash
ros2 launch serial_comm serial_comm.launch.py
source install/setup.bash
ros2 launch pb2025_nav_bringup rm_navigation_reality_static_launch.py \
  use_sim_time:=False \
  use_joy:=False \
  use_robot_state_pub:=True \
  use_rviz:=False \
  slam:=False \
  world:=map_name

启动Rviz2

rviz2 -d ./src/pb2025_sentry_nav/pb2025_nav_bringup/rviz/nav2_default_view.rviz

地图相关操作

2D栅格

保存地图:

ros2 run nav2_map_server map_saver_cli \
  -f src/pb2025_sentry_nav/pb2025_nav_bringup/map/staging/test_$(date +%Y%m%d_%H%M%S)

测试读取地图:

在工作空间下运行:

source install/setup.bash
ros2 launch map_server map_server.launch.py \
  map:=src/pb2025_sentry_nav/pb2025_nav_bringup/map/staging/map_name.yaml

点云pcd

cp -i \
  src/pb2025_sentry_nav/point_lio/PCD/scans.pcd \
  src/pb2025_sentry_nav/pb2025_nav_bringup/pcd/staging/test_$(date +%Y%m%d_%H%M%S).pcd

快速读取点云:

在工作空间下运行:

pcl_viewer -bc 255,255,255 src/pb2025_sentry_nav/pb2025_nav_bringup/pcd/staging/map_name.pcd

把PCD临时读取为PointCloud2(可用于测试以下问题):

  • PCD 和机器人 TF 是否对齐
  • PCD 和二维 map 是否重合
  • PCD 的 frame 是否正确
ros2 run pcl_ros pcd_to_pointcloud --ros-args \
  -p tf_frame:=camera_init \
  -p publishing_period_ms:=1000 \
  -r cloud_pcd:=cloud_pcd \
  -p file_name:=src/pb2025_sentry_nav/pb2025_nav_bringup/pcd/staging/map_name.pcd

-r cloud_pcd参数不填的话,默认也是cloud_pcd

在rviz2里:

  • Fixed Frame:camera_init
  • Add → PointCloud2 → Topic = /cloud_pcd