[carla入门教程]-5 使用ROS与carla通信

慈云数据 2024-03-20 技术支持 157 0

本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制.

第五节 使用ros与carla通信

本小节的主要内容是介绍carla中的如何使用ros进行通信.

  • 章节内容介绍:

    第1,2小节介绍了ROS和carla_ros_bridge的安装.

    第3小节介绍了如何设置carla_ros_bridge运行参数,并打开一个可以手动驾驶的ros节点.还介绍了能够提供给ros接口的传感器信息.

    第4小节介绍了如何通过ros发送控制指令让车动起来.并且介绍了如何使用rviz查看车辆的部分传感器信息.

    文章目录

    • 第五节 使用ros与carla通信
      • 1.安装ROS
      • 2.安装carla_ros_bridge
        • 2.1 创建虚拟环境
        • 2.2 通过apt安装carla-ros-bridge
        • 2.3 配置环境变量并运行
        • 3.运行carla_ros_bridge
          • 3.1 roslaunch参数设置
          • 3.2 运行一个手动驾驶ros节点
          • 3.3 carla_ros_bridge能够提供的传感器信息
          • 4.通过ros与carla交互
            • 4.1 通过发布ros消息让车动起来
            • 4.2 通过rviz查看传感器数据
            • 5 挑战性的任务
            • 参考链接
            • 异常处理
              • 问题1.打开手动驾驶脚本后画面很黑

                1.安装ROS

                安装ros可以使用鱼香ROS的网站上的一键安装进行安装.carla_ros_bridge支持ROS1和ROS2,本文使用ROS1.

                小鱼的一键安装系列-

                • carla_ros_bridge的ROS版本支持:

                  ROS Melodic — For Ubuntu 18.04 (Bionic)

                  ROS Noetic — For Ubuntu 20.04 (Focal)

                • carla版本支持:

                  CARLA 0.9.7 or later

                  本教程使用carla0.9.12,ROS Melodic

                  2.安装carla_ros_bridge

                  安装方式有两种:第一种apt安装,第二种是源码安装.

                  源码安装可能会遇到很多依赖库的问题,而apt安装比较方便,并且适用于ubuntu1804系统,所以这里推荐选择apt安装.

                  2.1 创建虚拟环境

                  ros-bridge 需要安装到 python2.7 的环境中。

                  conda create -n py27 python=2.7
                  

                  激活虚拟环境:

                  conda activate py27
                  

                  换源,并安装依赖:

                  pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
                  pip install opencv-python==4.2.0.32 
                  pip install networkx
                  pip install rospkg
                  pip install rospy
                  pip install simple_pid
                  pip install transforms3d
                  pip install networkx
                  pip install enum
                  pip install pygame
                  

                  2.2 通过apt安装carla-ros-bridge

                  添加镜像源:

                  sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1AF1527DE64CB8D9
                  sudo add-apt-repository "deb [arch=amd64] http://dist.carla.org/carla $(lsb_release -sc) main"
                  sudo apt-get update
                  

                  apt安装

                  sudo apt-get install carla-ros-bridge
                  

                  这里看到安装的版本其实是0.9.10版本,但是不影响我们后面的使用.

                  在这里插入图片描述

                  2.3 配置环境变量并运行

                  首先运行carla服务器:

                      ./CarlaUE4.sh
                  

                  然后我们需要切换到py27的虚拟环境

                  conda activate py27
                  

                  指定carla的目录,并验证一下是否正确:

                  export CARLA_ROOT=/home/lbw/Carla/recompressed/carla-0.9.12
                  export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla/dist/carla-0.9.12-py2.7-linux-x86_64.egg:$CARLA_ROOT/PythonAPI/carla
                  python -c 'import carla;print("Success")' 
                  

                  如果打印了success说明pythonAPI路径配置成功.

                  在终端中source一下环境变量:

                  source /opt/carla-ros-bridge/melodic/setup.bash 
                  

                  运行一下:

                   roslaunch carla_ros_bridge carla_ros_bridge.launch
                  

                  在这里插入图片描述

                  使用rostopic list可以查看到carla发布的消息:

                  在这里插入图片描述

                  • 为了日后启动方便,我们直接添加到.bashrc里面
                    gedit ~/.bashrc
                    

                    在脚本中写入(需要在# >>> conda initialize >>>之前):

                    source /opt/carla-ros-bridge/melodic/setup.bash 
                    export CARLA_ROOT=/home/lbw/Carla/recompressed/carla-0.9.12
                    export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla/dist/carla-0.9.12-py2.7-linux-x86_64.egg:$CARLA_ROOT/PythonAPI/carla
                    

                    3.运行carla_ros_bridge

                    运行carla_ros_bridge前,我们都需要切换到py27的虚拟环境中,否则会引起报错.

                    3.1 roslaunch参数设置

                    在roslaunch carla_ros_bridge carla_ros_bridge.launch 后面是可以加参数的,例如可以通过host and port改服务器地址,可以通过town修改地图.

                    后缀运行参数的格式是:=,例如:passive:=True.

                    在运行多个客户端时,carla_ros_bridge这个客户端会自动获得更新的优先权,会优先对世界进行tick,也就是更新.除非我们设置passive:=True.

                    carla_ros_bridge默认工作在synchronous_mode下,等待所有传感器消息都传回来才会进行下一次更新,确保更新频率的一致.

                    carla_ros_bridge默认是订阅所有传感器的,即register_all_sensors:=True

                    默认配置存储路径:

                    /opt/carla-ros-bridge/melodic/share/carla_ros_bridge/config

                    其他参数的具体说明如下:

                    • use_sim_time: This should be set to True to ensure that ROS is using simulation time rather than system time. This parameter will synchronize the ROS /clock topic with CARLA simulation time.
                    • host and port: Network settings to connect to CARLA using a Python client.
                    • timeout: Time to wait for a successful connection to the server.
                    • passive: Passive mode is for use in scynchronous mode. When enabled, the ROS bridge will take a backseat and another client must tick the world. ROS bridge will wait for all expected data from all sensors to be received.
                    • synchronous_mode:

                      If false: Data is published on every world.on_tick() and every sensor.listen() callback.

                      If true (default): ROS bridge waits for all the sensor messages expected before the next tick. This might slow down the overall simulation but ensures reproducible results.

                    • synchronous_mode_wait_for_vehicle_control_command: In synchronous mode, pauses the tick until a vehicle control is completed.
                    • fixed_delta_seconds: Simulation time (delta seconds) between simulation steps. It must be lower than 0.1. Take a look at the documentation to learn more about this.
                    • ego_vehicle: Role names to identify ego vehicles. Relevant topics will be created so these vehicles will be able to be controlled from ROS.
                    • town: Either use an available CARLA town (eg. ‘town01’) or an OpenDRIVE file (ending in .xodr).
                    • register_all_sensors:

                      If false: Only sensors spawned by the bridge are registered.

                      If true (default): All the sensors present in the simulation are registered.

                      3.2 运行一个手动驾驶ros节点

                      首先需要运行carla服务器:

                      ./CarlaUE4.sh
                      

                      之后使用roslaunch打开官方提供carla_ros_bridge_with_example_ego_vehicle脚本,设置地图为town01:

                      roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch town:='town01'
                      

                      这个脚本实际上是三个模块组成:

                      • carla_ros_bridge.launch
                      • carla_example_ego_vehicle.launch
                      • carla_manual_control.launch

                        打开后,我们可以看到下面的界面:

                        在这里插入图片描述

                        如果你的画面显示比较暗,可以参考文章最后的异常处理的问题1的解决方法.

                        按H后弹出操控界面.可以看到,需要先按B启动手动控制,否则车是动不了的. 其他的操控方式和

                        在这里插入图片描述

                        3.3 carla_ros_bridge能够提供的传感器信息

                        我们打开传感器的配置文件:

                        sudo gedit /opt/carla-ros-bridge/melodic/share/carla_ego_vehicle/config/sensors.json
                        

                        可以看到,里面涉及到的传感器有:

                        • 前视RGB相机
                        • 第三人称视角RGB相机
                        • 32线激光雷达lidar
                        • 毫米波雷达radar
                        • 全球卫星导航系统gnss
                        • 加速度计imu
                        • 障碍物传感器(carla)
                        • 车道线入侵传感器(carla)

                          除此之外,carla还提供很多其他的传感器,详细内容可参考官方文档:Sensors and data

                          在第4小节将详细介绍如何使用rviz查看传感器信息.

                          4.通过ros与carla交互

                          第四节讲解一下如何通过通过ros来订阅传感器的消息,并且发布ros消息对车辆油门刹车转向等进行控制.

                          4.1 通过发布ros消息让车动起来

                          在终端中使用下述命令可以实现车辆的直线运动.

                              rostopic pub /carla/ego_vehicle/vehicle_control_cmd carla_msgs/CarlaEgoVehicleControl "{throttle: 1.0, steer: 1.0}" -r 10
                          

                          更加简单的操作是使用rqt来可视化的发送ros消息,在终端中输入

                          rqt
                          

                          选择Plugins->Topics->Message Publisher 打开消息发布界面

                          在这里插入图片描述

                          在Topic中选择/carla/ego_vehicle/vehicle_control_cmd,在Type中选择carla_msgs/CarlaEgoVehicleControl

                          然后点击加号:

                          在这里插入图片描述

                          展开下面的消息,改变expression的数值.将油门throttle改为1,然后勾选左边的对号

                          在这里插入图片描述

                          然后你就会发现车自己动起来了.

                          4.2 通过rviz查看传感器数据

                          为了方便的查看传感器信息,我们使用rviz来可视化.这里提供了一个已经配置好的rviz配置:

                          gitte代码库

                          找到rviz_carla_sensor.rviz,然后使用下面的命令打开rviz:

                          rosrun  rviz  rviz  -d  rviz_carla_sensor.rviz
                          

                          可以看到如下界面:

                          在这里插入图片描述

                          5 挑战性的任务

                          通过订阅车辆的全局位置信息,实现从start到goal的完整行驶.

                          定位:通过订阅车辆的全局位置信息

                          感知:车道线检测(使用开源算法)

                          规划:全局路径规划+局部路径规划(使用开源算法)

                          定位和感知信息直接通过carla_ros_bridge获取,规划指令通过carla_ros_bridge发布.

                          可以查看[carla入门教程]-6 来获取比赛场景的创建.

                          参考链接

                          ROS bridge installation for ROS 1

                          ROS Bridge 笔记(01)— 简介、apt 安装、源码编译安装、安装依赖、运行显示

                          异常处理

                          问题1.打开手动驾驶脚本后画面很黑

                          如果打开后的画面很黑,说明相机曝光参数存在问题.

                          在这里插入图片描述

                          解决方法是需要调整一下相机曝光参数.具体做法为:

                          sudo gedit /opt/carla-ros-bridge/melodic/share/carla_ego_vehicle/config/sensors.json
                          

                          修改相机参数:

                          "iso":200 
                          

                          改成:

                          "iso":3000
                          

                          需要修改的有两处,"id": "front",和"id": "view",两个相机的参数都需要修改.

                          如果还不够亮,可以进一步调大iso.

                          在这里插入图片描述

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon