跳到主要内容

rikibotROS小车

硬件接线

YOLO v5

一个终端启动摄像头:

roslaunch astra_camera astra_pro.launch

另一个终端启动YOLO v5:

roslaunch rikibot_yolov5 rikibot_yolov5.launch

YOLOv5都是封装好了训练好了的,cuda报错不用管。

多机通讯

信息

免键盘可以连接手机热点,去ubuntu里的设置-网络-热点网络旁边的小齿轮看ip地址,其实不需要ip a。

而且不需要桥接也可以。

举个例子我手机开好热点,虚拟机的ip是192.168.131.136, 小车是192.168.43.142。

那我就直接在虚拟机里面开个终端ssh gj@192.168.43.142就可以了。目前看来不需要export也行

通过同网段实现通信,需要改一下环境变量配置文件。

.bashrc:

export ROS_MASTER = http://172.20.10.12:11311 # 本机IP地址,端口是固定的11311,具体根据网络ip改
export ROS_HOSTNAME = 172.20.10.12

Ubuntu里面怎么看小车IP地址?

ip a # 查询IP地址

然后看inet那一行(除了环回测试地址),就是需要的IP地址。

用虚拟机需要设置网络为桥接模式。

总的来说,需要以下步骤:

  1. 手机开热点,电脑和小车同时连这个热点,保证两个机子都在同一无线网下。
  2. 改虚拟机网络为桥接。
  3. ip a查询IP地址,小车和虚拟机都查。
  4. 改虚拟机的.bashrc文件,设置ROS_MASTER_URI和ROS_HOSTNAME。
export ROS_MASTER_URI=http://小车的ip地址:11311
export ROS_HOSTNAME=虚拟机的ip地址(不加http://)

然后用SSH测试一下: 虚拟机开一个终端:

ssh gj@小车的ip地址
# 密码是buct

然后可以拔掉键盘和鼠标。

开三个终端ssh。

底盘测试

在虚拟机里面开好五个终端(四个连接ssh完毕)。

第一个键入:

roslaunch rikibot bringup.launch
# 成功了就会实时更新消息

第二个终端启动一个键盘控制节点:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

这样的话就可以像控制小海龟一样控制车全向行驶,控制方向键是UIO JKL MN。

危险

实际Debug的时候,一定要注意开下位机,我为什么这么说呢,如果你是接联想电源充着电做的话,那下位机(似乎)是不工作的,所以最好是充好电了,然后再去开小车的总控开关debug。

否则,就会出现以下情景:

微信截图_20241111160430

SLAM建图

第三个终端开SLAM建图节点,小车自带一个gmapping 包:

roslaunch rikibot lidar_slam.launch
# 出现Registering First Scan 即为启动成功

第四个不连接SSH的虚拟机本地终端启动rviz:

rviz

打开Rviz什么也没有,这个时候点File-Open Config,打开gj_ws/src/rikibot_project/rikibot/rviz/slam.rviz

导入小车的激光雷达以及SLAM地图信息。

此时光标点击一下(其实不点也行?)第二个键盘控制节点的终端,车到处走,就可以建图。

地图保存

第五个连接着SSH的终端进行地图保存的操作

cd ~/gj_ws/src/rikibot_project/rikibot/maps # 切换到地图保存的文件夹
ls # 看看有没有map.sh,用于保存地图
./map.sh
# 出现Done即为保存完整

建的地图放在了~/gj_ws/src/rikibot_project/rikibot/maps里面,格式是pgm和yaml文件,可以打开确认一下。

底盘launch文件解读

进入~/gj_ws/src/rikibot_project/rikibot/launch,找到bringup.launch文件。

找到group标签:

微信截图_20241111013159

惯性测量单元(IMU):有两种型号,默认是MPU6050,根据imu_type这个参数选择(应该不用改了)。

底下的node标签中的程序包imu_calib是校正程序,程序包hfi没提供不用管,cmm_type是通讯模式(默认是serial串口通信)。

节点imu_filter_madgwick是imu滤波程序。节点riki_base_node是底盘控制程序。

static_transform_publisher是静态坐标变换程序(发布者节点)。

ekf_localization_node是里程计信息发布者程序,并且包含了滤波和校正功能。

最后的param标签是加载小车urdf模型到服务器中。

多点导航

参考以下launch文件:

cd ~/gj_ws/src/rikibot_project/rikibot/launch #文件路径
roslaunch rikibot_navigation navigate.launch
# 其中, show_mark.py就是源码,路径是~/gj_ws/src/rikibot_project/rikibot/script/show_mark.py

这一段源码要读,根据建图的地址,在# first goal标签下设置导航目标。