Skip to content

ROS-Maver-X4

中文 | English

适配仓库hex_toolkit_maver_x4


简介

我们提供的 ROS 功能包均开源。hex_toolkit_maver_x4 这个仓库包含全部所需功能。您可以自行查看并修改。

但是 ROS 功能包的配置较为复杂,容易出现各类依赖问题。因此,我们提供配好环境的 Docker 镜像,便于排除各种库不兼容等问题。

我们将提供两种配置教学,一种使用 Docker 容器化配置,一种不使用Docker。

需要注意的是,我们 不会 对不使用Docker配置出现的 任何兼容性问题 提供任何协助。并且,不使用Docker的教学只会演示到能够使用 cmd_vel 控制实车为止。

如果您使用的是全新仅安装了ROS的Ubuntu电脑,并且仅打算使用 cmd_velodom, 那么您也可以选择 不用Docker

1. Docker容器化配置

1.1 获取Docker镜像

使用docker pull获取镜像

docker pull hexfellow/hex-docker-noetic-maver-x4

1.2 初始化工作目录

按照下面目录创建文件夹:

~/hex_docker/
├── application
│   ├── catkin_ws
│   │   └── src
│   └── git_source
└── docker_shell
mkdir -p hex_docker/application/catkin_ws/src hex_docker/application/git_source hex_docker/docker_shell

1.3 配置启动脚本

docker_shell 目录下创建 start.sh 脚本,并输入下面内容

Warning

以下内容按照您使用 Nvidia GPU 的情况进行配置,如果您的电脑不是 Nvidia GPU,请将 --runtime=nvidia --gpus all-e NVIDIA_DRIVER_CAPABILITIES=display,compute 删除。

cd ~/hex_docker/docker_shell && vim start.sh
#!/usr/bin/env bash

HOST_USER=$(whoami)
SHELL_DIR=$(dirname "$0")

CURRENT_DIR=$(pwd)
cd $SHELL_DIR

docker run -dit \
  # 容器名, 您可以将 `hex-docker-humble-maver-x4` 替换成您喜欢的名字
  --name=hex-docker-humble-maver-x4 \ 
  --net=host \
  --ipc=host \
  --runtime=nvidia --gpus all \
  -e NVIDIA_DRIVER_CAPABILITIES=display,compute \
  -e DISPLAY=$DISPLAY \
  -e QT_X11_NO_MITSHM=1 \
  -e XDG_RUNTIME_DIR=/run/user/$(id -u $HOST_USER) \
  --privileged \
  -v /dev:/dev:rw \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -u $(id -u $HOST_USER):$(id -g $HOST_USER) \
  -v /run/user/$(id -u $HOST_USER):/run/user/$(id -u $HOST_USER):rw \
  -w /home/hexfellow \
  hexfellow/hex-docker-noetic-maver-x4

cd $CURRENT_DIR

1.4 启动容器

运行start.sh脚本

cd ~/hex_docker/docker_shell
chmod +x start.sh
./start.sh

使用以下命令进入containerattach后,这个终端中的所有操作都会在容器中执行。

docker attach hex-docker-humble-maver-x4

如果您不清楚 Docker container的使用方法, 可以参考网络上的各种 Docker 教程

1.5 编译并运行键盘控制demo

在容器的终端中,运行以下指令编译

cd /home/hexfellow/catkin_ws
colcon build

接下来演示如何使用键盘控制节点来测试环境配置是否成功:

wsadjl:分别代表前进、后退、左移、右移、逆时针旋转、顺时针旋转。

Warning

⚠️控制实车前请确保实车IP地址已正确配置,请参考IP地址设置。⚠️

本次拉取的是 ROS2 的 demo,如果您拉的是 ROS1 镜像,请将最后一句改为:roslaunch hex_toolkit_maver_x4 key_ctrl.launch

cd /home/hexfellow/catkin_ws
source install/setup.bash --extend
ros2 launch hex_toolkit_maver_x4 key_ctrl.launch.py

随后,您便可以在终端中控制实车移动。

PS:Docker 使用提示

若想运行多个程序,可使用tmux,使用方法可参考该教程

若想挂起当前container,先按Ctrl+p,再按Ctrl+q,挂起后若想恢复,可用下面指令

docker attach hex_noetic_basic

若想退出当前container,直接输入exit即可,退出后若想重新启动container,则需要输入下面指令(此时container处于停止状态)

docker start hex_noetic_basic

2. 工控机原生配置

Warning

⚠️ 我们 不会 对不使用Docker配置出现的 任何兼容性问题 提供任何协助。⚠️

2.1 准备工作

安装必备的软件包:

sudo apt update
sudo apt install python3-pip
sudo apt install git

创建工作空间与依赖目录:

mkdir -p catkin_ws/src git_source
cd ~/git_source

2.2 安装并编译依赖库

2.2.1 安装protoc,请选择适配你的电脑的架构

可以运行以下指令查看电脑架构

uname -a

For Linux x86_64

wget https://github.com/protocolbuffers/protobuf/releases/download/v27.1/protoc-27.1-linux-x86_64.zip
sudo unzip protoc-27.1-linux-x86_64.zip -d /usr/local
rm protoc-27.1-linux-x86_64.zip

For Linux arm64:

wget https://github.com/protocolbuffers/protobuf/releases/download/v27.1/protoc-27.1-linux-aarch_64.zip
sudo unzip protoc-27.1-linux-aarch_64.zip -d /usr/local
rm protoc-27.1-linux-aarch_64.zip

2.2.2 安装依赖库

cd ~/git_source
git clone https://github.com/hexfellow/hex_vehicle_python_lib.git
cd hex_vehicle_python_lib
git submodule update --init
python3 -m pip install .

2.3 安装并编译基本 ROS 功能包

进入 ROS 工作空间的 src 目录并克隆所需的包:

cd ~/catkin_ws/src
git clone https://github.com/hexfellow/robot_hardware_interface.git

ROS1:

cd .. # 返回 catkin_ws 根目录
source /opt/ros/noetic/setup.bash
catkin_make

ROS2:

cd .. # 返回 catkin_ws 根目录
source /opt/ros/humble/setup.bash
colcon build

2.4 实车控制测试

ROS1:

source devel/setup.bash --extend
# 将<ip addr>替换为实车IP地址, IP地址查看方式在之前的章节中已经介绍过
roslaunch robot_hardware_interface chassis_bringup.launch ws_url:="ws://<ip addr>:8439" simple_mode:=true

ROS2:

source install/setup.bash --extend
# 将<ip addr>替换为实车IP地址, IP地址查看方式在之前的章节中已经介绍过
ros2 launch robot_hardware_interface chassis_bringup.launch.py ws_url:="ws://<ip addr>:8439" simple_mode:=true

然后,额外开启一个终端运行以下指令来控制实车移动

ROS1:

rosrun robot_hardware_interface chassis_key_control.py

ROS2:

ros2 run robot_hardware_interface chassis_key_control