首页/文章/ 详情

仿真测试入门参考(23):CARLA的ROS交互接口

1年前浏览4742

 经常有朋友问如何学习仿真测试,于是想着把自己的一些经验和理解分享出来,希望能有所帮助。不过视野和技术有限,所说不一定对,供大家批评和参考。这是第23篇,CARLA的ROS交互接口。

上一篇介绍了如何在CARLA中运行OpenSCENARIO 1.0和2.0格式的文件,本篇是CARLA系列的最后一篇,说明如何使用carla-ros-bridge。

ros_bridge是CARLA与ROS/ROS2之间的交互接口,实现了CARLA和ROS/ROS2双向通信,便于将基于ROS/ROS2的算法与CARLA连接,实现完整的测试闭环,本篇以ROS2 Foxy为例进行说明。

01

carla-ros-bridge的安装



(1)建立文件夹并下载代码



$ mkdir -p ~/carla-ros-bridge && cd ~/carla-ros-bridge$ git clone --recurse-submodules https://github.com/carla-simulator/ros-bridge.git src/ros-bridge

(2)安装ROS依赖





$ source /opt/ros/foxy/setup.bash$ sudo rosdep init$ rosdep update$ rosdep install --from-paths src --ignore-src -r

“sudo rosdep init”时可能包含如下内容的报错“ERROR: cannot download default sources list”,这时先通过“ping raw.githubusercontent.com”查看网站是否可以ping通,若可以ping通的话,则可以尝试按照下述操作在hosts文件中添加相关内容:






# 打开hosts文件$ sudo gedit /etc/hosts# 添加如下内容199.232.28.133 raw.githubusercontent.com151.101.228.133 raw.github.com

“rosdep install”时可能提示无法安装derived-object-msgs和ackermann-msgs,这时可以通过如下命令手动安装:



$ sudo apt install ros-foxy-derived-object-msgs$ sudo apt install ros-foxy-ackermann-msgs

(3)编译

在终端运行“colcon build”进行编译。

(4)设置环境变量

为了在运行时能够找到相关的文件,需要设置一些环境变量。打开~/.bashrc文件,并在其结尾加入如下内容:


export SCENARIO_RUNNER_PATH=$SCENARIO_RUNNER_ROOT

(5)试运行

按照如下操作,启动CARLA和carla-ros-bridge样例。








# 启动CARLA$ cd /path/to/carla$ ./CarlaUE4.sh# 打开一个新的终端$ cd /path/to/carla-ros-bridge$ source ./install/setup.bash$ ros2 launch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch.py

此时会在CARLA世界生成ego车,并弹出一个pygame窗口进行ego的的控制,这说明ros-bridge安装成功。

如果使用的是CARLA 0.9.14的话,会有一个报错“[FATAL] [carla_ros_bridge]: CARLA python module version 0.9.13 required. Found: 0.9.14”,这是因为当前的ros-bridge还是匹配的CARLA 0.9.13,读者可将ros-bridge文件夹下的CARLA_VERSION文件的内容更改为0.9.14,并重新编译即可。

02

carla-ros-bridge的组成



ros-bridge由多个模块组成,各自发挥不同的作用,具体如下表所示。

03

carla_ad_demo运行实例



下面通过运行carla_ad_demo,并分析启动的各节点的相互关系,介绍ros-bridge的使用方法和效果。

按照如下操作,启动CARLA和carla_ad_demo样例。








# 启动CARLA$ cd /path/to/carla$ ./CarlaUE4.sh# 打开一个新的终端$ cd /path/to/carla-ros-bridge$ source ./install/setup.bash$ ros2 launch carla_ad_demo carla_ad_demo_with_scenario.launch.py

之后会弹出下图所示的RVIZ2窗口,其右侧为各种传感器的可视化,中部是仿真全景,左下角是rviz_carla_plugin,可以查看Ego车的状态并对仿真进行控制。

此时仿真并没有运行,在左下角的“Scenario Execution”位置可以看到将要运行的场景是“FollowLeadingVehicle.xosc”,读者可以通过修改carla_ad_demo/launch/carla_ad_demo_with_scenario.launch.py中“ros_topic_msg_string”中的相关内容,来改变场景文件。

点击“Execute”按钮后,仿真开始运行。按照FollowLeadingVehicle.xosc中的场景设计,生成慢速的前车,由carla_ad_agent控制ego车跟随前车行驶(由于carla_ad_agent中的逻辑极为简单,跟随过程稍显笨拙)。

打开一个新的终端,输入如下命令,打开rqt_graph窗口,其中可显示目前启动的ROS2节点及其消息交互:




$ cd /path/to/carla-ros-bridge$ source ./install/setup.bash$ rqt_grqph

主要的消息如下表所示:

对其逻辑简述如下:

carla_ad_demo_with_scenario.launch.py中启动了carla_ros_bridge作为CARLA和ROS2环境间的主要通信接口,从CARLA获取并发布ego车、障碍车、红绿灯相关信息,从ROS2接收对ego车的控制命令并转发给CARLA。

carla_ad_agent中的ad_agent接收ego车目标车速以及ego车、障碍车、红绿灯相关信息,进行简单的逻辑处理后发布ego车的车速控制目标。其逻辑是,若前方一定距离(默认为12m)内有障碍车或者红绿灯则将车速控制目标设置为0,否则设置为其接收到的目标车速。

carla_ad_agent中的local_planner接收目标路径点和车速控制目标,通过PID控制器实现对路径点和车速的跟踪,计算得到对ego车的控制命令并发布。

carla_ros_scenario_runner加载并运行指定的场景文件FollowLeadingVehicle.xosc。如下述xosc文件片段,该文件中为ego车配置了名为“EgoVehicleAgent”的自定义控制器,其实就是carla_ros_scenario_runner下的ros_vehicle_control,该模块可以在场景运行时将xosc中定义的ego车的路径点和目标车速发布出来。

来源:孙工自动驾驶
UGpython通信自动驾驶控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-12-02
最近编辑:1年前
孙工自动驾驶
硕士 专注自动驾驶仿真测试
获赞 19粉丝 30文章 82课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈