0
0
0
0
分享

Gazebo环境下基于ROS和OpenCV的阿克曼小车多车跟随的实验报告

2023-05-16000
笔记来源于:实验
Gazebo环境下基于ROS和OpenCV的阿克曼小车多车跟随
实现四辆车的多车跟随
实验名称:Gazebo环境下基于ROS和OpenCV的阿克曼小车多车跟随
实验目的:尝试实现Gazebo环境下基于ROS和OpenCV的阿克曼小车多车跟随,并理解其原理。
实验原理:
跟车程序使用的是multicars场景,由multicars.launch文件启动。找到/root/aliyun_demo/src/raceworld-master/launch文件夹中的multicars.launch文件并打开。
在launch文件内加载了deepracer1到deepracer4四个组,每个组加载多个控制器,其中各个组中的left_rear_wheel_velocity_controller,right_rear_wheel_velocity_controller,left_front_wheel_velocity_controller, right_front_wheel_velocity_controller,left_steering_hinge_position_controller和right_steering_hinge_position_controller接收ROS消息,分别控制了左右后轮速度,左右前轮速度和转向角度。
在加载控制器代码的下面,还加载了一个名为servo_comannds.py的代码文件。
打开servo_comannds.py文件我们可以看到,代码中新建了一个名为servo_comannds的节点,他订阅并接收/robot_name(deepracer1到deepracer4)/ackermann_cmd_mux/output消息。
在接收到消息后,经过适当的转换,将速度和转向信息发布给之前所述六个控制器。
跟车程序由multi_follow1.launch文件启动。其中调用了lane_master.py,pure_master.cpp和main_master.cpp三个程序。
其中main_master.cpp的功能比较简单,新建一个/status主题的发布者,将leader和follower的名字设置好后就可以发布出去。
follower的跟车由pure.cpp实现。首先订阅/status,/deepracer1/base_pose_ground_truth到/deepracer4/base_pose_ground_truth主题,获取leader和follower的名字信息以及四辆车的位姿和转角信息。
将前车的位置信息作为目标进行跟随。
在计算并设置好速度与转角之后,将AckermannDriveStamped类型的消息发布出去。

leader的巡线由lane_master.py实现。在代码中首先新建了lane节点,并且订阅了名为/deepracer1/camera/zed_left/image_rect_color_left的消息。该消息通过Gazebo中的deepracer1小车上的左摄像头获取。在获取到摄像头图像信息后,把它转换为cv2图像数据。此外,还创建了一个/deepracer1/ackermann_cmd_mux消息的发布者。

获得的图像信息通过了高斯滤波,HSV图像转换,腐蚀,二值图转换,视角转换,灰度值处理等一系列操作。
原始图像如下。

we_ui_refresh

腐蚀操作后图像如下。

we_ui_refresh

视角转换后图像如下。

we_ui_refresh

随后根据图像大小设置滑动窗口的参数。
并且在视角转换后的图像中绘制出来。
随后绘制车道线,计算出质心坐标后绘制两个定位用的圆形。其中蓝色圆形位于车道线上,绿色圆形使用的是质心的坐标。
绘制后的图像如下。

we_ui_refresh

计算目标点的真实坐标。并根据偏差计算转角数据。
新建一个AckermannDriveStamped类型数据,给速度和转角信息复制后即可发布。
实验步骤:
创建资源,进入Docker镜像

we_ui_refresh


打开终端,输入如下命令启动multicars场景。
场景如下所示。

we_ui_refresh


关闭场景阴影。

we_ui_refresh


新建终端,输入如下命令启动follow.launch。
随后可以看到多车跟随程序的运行情况。

we_ui_refresh
上一篇
王瑞坤 周二 522031910201 实验名称:Gazebo环境下基于ROS和OpenCV的阿克曼小车多车跟随 实验目的:尝试实现Gazebo环境下基于ROS和OpenCV的阿克曼小车多车跟随,并理解其原理。 实验原理: 跟车程序使用的是multicars场景,由multicars.launch文件启动。找到/root/aliyun_demo/src/raceworld-master/launch文件夹中的multicars.launch文件并打开。 <node name="controller_manager" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="left_rear_wheel_velocity_controller right_rear_wheel_velocity_controller left_front_wheel_velocity_controller right_front_wheel_velocity_controller left_steering_hinge_position_controller right_steering_hinge_position_controller joint_state_controller" /> 在launch文件内加载了deepracer1到deepracer4四个组,每个组加载多个控制器,其中各个组中的left_rear_wheel_velocity_controller,right_rear_wheel_velocity_controller,left_front_wheel_velocity_controller, right_front_wheel_velocity_controller,left_steering_hinge_position_controller和right_steering_hinge_position_controller接收ROS消息,分别控制了左右后轮速度,左右前轮速度和转向角度。 在加载...
下一篇
Gazebo环境下基于ROS和OpenCV的阿克曼小车多车跟随 王宠迪 520021910668 周四班级(1503-21) %1. 实验目的:实现Gazebo环境下基于ROS和OpenCV的多辆阿克曼小车互相自动跟随 %1. 实验原理: (1)跟车的实现:与之前的实验不同,采用了raceworld-master/launch文件夹中的multicars.launch对应的环境。该launch文件定义了deepracer1~deepracer4四个组,分别对应四辆阿克曼小车,每辆车对应的组下分别加载六个控制四轮速度、转角的控制器,定义及消息发布、订阅原理与之前实验完全相同。跟车程序由multi_follow1.launch实现,其中调用的main_master.cpp文件定义了主题为/status的发布者,发布头车和跟随车的名字;lane_master.py文件定义了lane节点,并订阅头车左摄像头图像信息,经处理后控制头车巡线,原理同之前的巡线实验;pure_master.cpp订阅了四辆车的ground_truth信息,获取其速度和转角,并订阅头车、跟随车名字信息,从而实现后车跟随。 (2)图像处理:由lane_master.py文件中的cv2相关图像处理函数实现 %1. 实验步骤及结果: (1)打开虚拟环境,进入aliyun_demo工作空间,终端启动roscore和multicars场景,可见与之前使用的raceworld场景不同,该场景中出现了四辆相同的阿克曼小车; (2)在侧面菜单的Scene一栏中关闭场景阴影,便于后车图像处理; (3)新建终端,输入roslaunch raceworld_master multi_follow1.launch命令(注意此处实验手册的命令有误,第二个参数是raceworld_master而非raceworld,对应不同的工作环境),即可在Gazebo中看到多车跟随、头车左摄像头和图像处理后的结果。

评论

登录后可评论