ROS-Maver-X4
适配仓库:hex_toolkit_maver_x4
简介
我们提供的 ROS 功能包均开源。hex_toolkit_maver_x4 这个仓库包含全部所需功能。您可以自行查看并修改。
但是 ROS 功能包的配置较为复杂,容易出现各类依赖问题。因此,我们提供配好环境的 Docker 镜像,便于排除各种库不兼容等问题。
我们将提供两种配置教学,一种使用 Docker 容器化配置,一种不使用Docker。
需要注意的是,我们 不会 对不使用Docker配置出现的 任何兼容性问题 提供任何协助。并且,不使用Docker的教学只会演示到能够使用 cmd_vel 控制实车为止。
如果您使用的是全新仅安装了ROS的Ubuntu电脑,并且仅打算使用 cmd_vel
与 odom
, 那么您也可以选择 不用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
使用以下命令进入container
,attach
后,这个终端中的所有操作都会在容器中执行。
docker attach hex-docker-humble-maver-x4
如果您不清楚 Docker container的使用方法, 可以参考网络上的各种 Docker 教程
1.5 编译并运行键盘控制demo
在容器的终端中,运行以下指令编译
cd /home/hexfellow/catkin_ws
colcon build
接下来演示如何使用键盘控制节点来测试环境配置是否成功:
w
、s
、a
、d
、j
、l
:分别代表前进、后退、左移、右移、逆时针旋转、顺时针旋转。
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