1.4.1 底盘基本使用

机器人底盘琳琅满目,但是其使用上大致相同,本节将以MyCar导航机器人底盘为例演示其基本使用,MyCar导航机器人根据底盘驱动类型的不同主要分为Arduino底盘与Stm32底盘两种类型,Arduino底盘为两轮差速底盘,Stm32底盘则包括两轮差速和四轮差速两种子类型。

本节将分别介绍Arduino底盘与Stm32底盘的具体使用。

1.准备工作

车辆底盘启动后,需要通过上位机进行控制,底盘与上位机的连接方式主要有两种:

  • 方式1:直接通过数据线将底盘连接到电脑;
  • 方式2:使用自带的上位机,并按照本教程第1.2节内容搭建远程开发环境。

无论采用哪种方式,都需要保证上位机已经按照本教程第1.3.1节内容进行了USB端口设置(如果是使用底盘自带的上位机,那么已经默认进行了配置),以确保上位机可以识别并操作外接的USB设备。

2.Arduino底盘使用

准备工作

在使用Arduino底盘之前,需要做如下准备工作(如果是使用底盘自带的上位机,该部分操作都已经默认实现)。

(1).硬件准备

通过USB数据线将机器人底盘连接到上位机,并打开底盘开关。上位机终端下执行指令:

ll /dev/ttyACM*

如正常,将输出类似如下的结果:

crw-rw---- 1 root dialout 166, 0  4月 27 20:15 /dev/ttyACM0

注意:如果物理连接无异常,Ubuntu系统显示无法访问 ‘/dev/ttyACM‘: 没有那个文件或目录,那么可能是brltty驱动占用导致的,可以运行sudo apt remove brltty然后重新插拔一下设备即可解决问题。

(2).系统准备

ros2_arduino_bridge是依赖于python-serial功能包的,请先在上位机安装该功能包,安装命令:

sudo pip install --upgrade pyserial

(3).软件安装

调用如下指令将此软件包下载到你的ROS2工作空间下的src目录:

git clone https://github.com/damuxt/ros2_arduino_bridge.git

(4).环境配置

终端下进入ros2_arduino_bridge/scripts,并执行指令:

bash create_udev_rules.sh

该指令将为Arduino端口绑定一个固定名称,重新将底盘与上位机连接,执行如下指令:

ll /dev | grep -i ttyACM

如正常,将输出类似如下的结果:

lrwxrwxrwx   1 root root           7  4月 27 20:16 myarduino -> ttyACM0
crwxrwxrwx   1 root dialout 166,   0  4月 27 20:16 ttyACM0

(5).构建功能包

工作空间下调用如下指令,构建功能包:

colcon build --packages-select ros2_arduino_bridge
使用流程

(1).配置参数

在功能包下提供了机器人底盘相关参数的配置文件ros2_arduino_bridge/params,参数内容可以自行修改(如果是初次使用,建议使用默认),该文件内容如下:

/ros2_arduino_node:
  ros__parameters:
    # pid 参数
    Kd: 45
    Ki: 0
    Ko: 50
    Kp: 8
    accel_limit: 0.5 # 加速限制
    base_controller_rate: 10
    base_controller_timeout: 1.0
    base_frame: base_footprint #基坐标系
    baud: 57600 # 波特率
    encoder_resolution: 3960 
    gear_reduction: 1
    motors_reversed: false
    port: /dev/myarduino # Arduino端口
    rate: 50
    timeout: 0.5
    use_sim_time: false
    wheel_diameter: 0.065 # 轮胎直径
    wheel_track: 0.21 # 轮间距
    max_vel_x: 0.18 # 最大线速度
    min_vel_x: -0.18 # 最小线速度
    max_vel_th: 0.8 # 最大角速度
    min_vel_th: -0.8 # 最小角速度

(2).启动launch文件

工作空间下,调用如下指令启动launch文件:

ros2 launch ros2_arduino_bridge ros2_arduino.launch.py

(3).控制底盘运动

上位机上,启动键盘控制节点:

ros2 run teleop_twist_keyboard teleop_twist_keyboard

接下来,就可以通过键盘控制机器人运动了。

3.Stm32底盘使用

准备工作

在使用Stm32底盘之前,需要做如下准备工作(如果是使用底盘自带的上位机,该部分操作都已经默认实现)。

(1).硬件准备

通过USB数据线将机器人底盘连接到上位机,并打开底盘开关。上位机终端下执行指令:

ll /dev/ttyUSB*

如正常,将输出类似如下的结果:

crw-rw---- 1 root dialout 166, 0  4月 27 20:15 /dev/ttyUSB0

PS:如果物理连接无异常,Ubuntu系统显示无法访问 ‘/dev/ttyUSB‘: 没有那个文件或目录,那么可能是brltty驱动占用导致的,可以运行sudo apt remove brltty然后重新插拔一下设备即可解决问题。

(2).软件安装

调用如下指令将此软件包下载到你的ROS2工作空间下的src目录:

git clone https://github.com/damuxt/ros2_stm32_bridge.git

(3).环境配置

终端下进入ros2_stm32_bridge/scripts,并执行指令:

bash create_udev_rules.sh

该指令将为STM32端口绑定一个固定名称,重新将底盘与上位机连接,执行如下指令:

ll /dev | grep -i ttyUSB

如正常,将输出类似如下的结果:

lrwxrwxrwx   1 root root           7  4月 27 20:16 mycar -> ttyUSB0
crwxrwxrwx   1 root dialout 166,   0  4月 27 20:16 ttyUSB0

(4).设置车辆类型

修改上位机用户目录下的 .bashrc 文件,在该文件中设置车辆类型,如果你使用的是两轮差速底盘,则添加如下语句:

export MYCAR_MODEL=stm32_2w

如果你使用的是四轮差速底盘,则添加如下语句:

export MYCAR_MODEL=stm32_4w

(5).构建功能包

工作空间下调用如下指令,构建功能包:

colcon build --packages-select ros2_stm32_bridge
使用流程

(1).配置参数

在功能包下params目录中提供了机器人底盘相关参数的配置文件,stm32_2w.yaml为两轮差速底盘的配置文件,stm32_4w.yaml为四轮差速底盘的配置文件,参数内容可以自行修改(如果是初次使用,建议使用默认)。

stm32_2w.yaml的文件内容如下:

/mini_driver:
  ros__parameters:
    base_frame: base_footprint
    baud_rate: 115200
    control_rate: 10
    encoder_resolution: 44.0
    kd: 30
    ki: 0
    kp: 25
    maximum_encoding: 100.0
    model_param_acw: 0.21
    model_param_cw: 0.21
    odom_frame: odom
    port_name: /dev/mycar
    qos_overrides:
      /parameter_events:
        publisher:
          depth: 1000
          durability: volatile
          history: keep_last
          reliability: reliable
      /tf:
        publisher:
          depth: 100
          durability: volatile
          history: keep_last
          reliability: reliable
    reduction_ratio: 90.0
    use_sim_time: false
    wheel_diameter: 0.065

stm32_4w.yaml的文件内容如下:

/mini_driver:
  ros__parameters:
    base_frame: base_footprint
    baud_rate: 115200
    control_rate: 10
    encoder_resolution: 44.0
    kd: 30
    ki: 0
    kp: 25
    maximum_encoding: 100.0
    model_param_acw: 0.45
    model_param_cw: 0.45
    odom_frame: odom
    port_name: /dev/mycar
    qos_overrides:
      /parameter_events:
        publisher:
          depth: 1000
          durability: volatile
          history: keep_last
          reliability: reliable
      /tf:
        publisher:
          depth: 100
          durability: volatile
          history: keep_last
          reliability: reliable
    reduction_ratio: 90.0
    use_sim_time: false
    wheel_diameter: 0.080

(2).启动launch文件

工作空间下,调用如下指令启动launch文件:

. install/setup.bash
ros2 launch ros2_stm32_bridge driver.launch.py

(3).控制底盘运动

上位机上,启动键盘控制节点:

ros2 run teleop_twist_keyboard teleop_twist_keyboard

接下来,就可以通过键盘控制机器人运动了。

4.启动rviz2查看车辆里程计数据

不管是何种类型的底盘,在启动后都会发布一个比较重要的数据:里程计。我们可以在rviz2中查看里程计信息,启动rviz2后,相关操作如下:

  • 将视图的参考坐标系(Fixed Frame)设置为odom;
  • 添加TF插件;
  • 添加Odometry插件,并将话题设置为odom。

使用键盘控制车辆运动时,就可以看到由Odometry插件显示的车辆的位姿信息了。

results matching ""

    No results matching ""