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

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

第五节 使用ros与carla通信

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

  • 章节内容介绍:

第1,2小节介绍了ROS和carla_ros_bridge的安装.
第3小节介绍了如何设置carla_ros_bridge运行参数,并打开一个可以手动驾驶的ros节点.还介绍了能够提供给ros接口的传感器信息.
第4小节介绍了如何通过ros发送控制指令让车动起来.并且介绍了如何使用rviz查看车辆的部分传感器信息.

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.
在这里插入图片描述

dwh@PC:~/carla-ros-bridge/catkin_ws$ catkin_make # 或 catkin build(若使用catkin_tools) Base path: /home/dwh/carla-ros-bridge/catkin_ws Source space: /home/dwh/carla-ros-bridge/catkin_ws/src Build space: /home/dwh/carla-ros-bridge/catkin_ws/build Devel space: /home/dwh/carla-ros-bridge/catkin_ws/devel Install space: /home/dwh/carla-ros-bridge/catkin_ws/install Multiple packages found with the same name "carla_ackermann_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_control - ros-bridge/carla_ackermann_control Multiple packages found with the same name "carla_ackermann_msgs": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_msgs - ros-bridge/carla_ackermann_msgs Multiple packages found with the same name "carla_ad_agent": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ad_agent - ros-bridge/carla_ad_agent Multiple packages found with the same name "carla_ad_demo": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ad_demo - ros-bridge/carla_ad_demo Multiple packages found with the same name "carla_common": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_common - ros-bridge/carla_common Multiple packages found with the same name "carla_manual_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_manual_control - ros-bridge/carla_manual_control Multiple packages found with the same name "carla_msgs": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_msgs - ros-bridge/carla_msgs Multiple packages found with the same name "carla_ros_bridge": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ros_bridge - ros-bridge/carla_ros_bridge Multiple packages found with the same name "carla_ros_scenario_runner": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ros_scenario_runner - ros-bridge/carla_ros_scenario_runner Multiple packages found with the same name "carla_ros_scenario_runner_types": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ros_scenario_runner_types - ros-bridge/carla_ros_scenario_runner_types Multiple packages found with the same name "carla_spawn_objects": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_spawn_objects - ros-bridge/carla_spawn_objects Multiple packages found with the same name "carla_twist_to_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_twist_to_control - ros-bridge/carla_twist_to_control Multiple packages found with the same name "carla_walker_agent": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_walker_agent - ros-bridge/carla_walker_agent Multiple packages found with the same name "carla_waypoint_publisher": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_waypoint_publisher - ros-bridge/carla_waypoint_publisher Multiple packages found with the same name "carla_waypoint_types": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_waypoint_types - ros-bridge/carla_waypoint_types Multiple packages found with the same name "pcl_recorder": - ros-bridge/carla-ros-bridge/src/ros-bridge/pcl_recorder - ros-bridge/pcl_recorder Multiple packages found with the same name "ros_compatibility": - ros-bridge/carla-ros-bridge/src/ros-bridge/ros_compatibility - ros-bridge/ros_compatibility Multiple packages found with the same name "rqt_carla_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/rqt_carla_control - ros-bridge/rqt_carla_control Multiple packages found with the same name "rviz_carla_plugin": - ros-bridge/carla-ros-bridge/src/ros-bridge/rviz_carla_plugin - ros-bridge/rviz_carla_plugin dwh@PC:~/carla-ros-bridge/catkin_ws$ source devel/setup.bash bash: devel/setup.bash: 没有那个文件或目录
03-19
<think>嗯,用户在使用catkin_make编译Carla ROS Bridge时遇到了多个同名包的问题,并且在编译后无法找到devel/setup.bash文件。首先,我需要分析这些同名包的原因。可能的情况是用户的工作空间中有重复的包路径,导致编译系统无法正确处理。例如,用户可能克隆了仓库到不同的目录,或者子模块嵌套导致路径重复。 接下来,用户执行source devel/setup.bash时提示文件不存在,这通常意味着编译没有成功完成,因此devel目录没有被正确生成。编译失败的原因很可能就是前面提到的重复包问题,导致catkin_make中途停止,从而没有生成必要的setup文件。 需要指导用户如何解决这些重复包的问题。首先应该检查工作空间中的src目录,查找是否有重复的包路径。例如,用户可能同时有ros-bridge/carla-ros-bridge/src/ros-bridge/...和ros-bridge/...这样的路径,这会导致catkin工具发现多个同名包,进而报错。 解决方法包括清理重复的包,可能通过移除重复的目录或调整工作空间的结构。另外,用户可能需要检查是否正确地克隆了子模块,或者是否有误操作导致包被复制到错误的位置。建议用户手动删除重复的包目录,然后重新运行catkin_make,确保编译过程顺利完成,从而生成devel/setup.bash文件。 此外,还需要提醒用户在编译成功后正确source环境变量,以确保ROS能够识别新编译的包。如果用户使用catkin build命令,可能需要使用不同的目录结构,但当前问题主要是重复包导致的编译失败,因此重点应放在解决路径冲突上。</think>在运行`catkin_make`时出现多个同名ROS包冲突的问题,这会导致编译失败。以下是逐步解决此问题的方法: --- ### **问题分析** 错误信息显示**同一工作空间(workspace)中存在多个同名ROS包**,例如: ``` Multiple packages found with the same name "carla_ackermann_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_control - ros-bridge/carla_ackermann_control ``` 原因是工作空间的`src`目录中存在重复的包路径。这通常由以下原因导致: 1. **错误地克隆仓库**:可能重复克隆了Carla ROS Bridge的子模块。 2. **子模块嵌套问题**:`carla-ros-bridge`可能自身包含子模块,其他手动克隆的包冲突。 --- ### **解决方案** #### **步骤1:清理重复的包** 进入工作空间的`src`目录,手动删除重复的包: ```bash cd ~/carla-ros-bridge/catkin_ws/src # 删除所有重复路径的包(根据错误提示选择保留一个) # 例如:保留 "ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_control" # 删除 "ros-bridge/carla_ackermann_control" rm -rf ros-bridge/carla_ackermann_control rm -rf ros-bridge/carla_ackermann_msgs # 其他重复包同理 ``` #### **步骤2:确保子模块正确初始化** 如果使用了Git子模块,需重新初始化: ```bash cd ~/carla-ros-bridge/catkin_ws/src git submodule update --init --recursive ``` #### **步骤3:重新编译** 清理之前的编译缓存并重新编译: ```bash cd ~/carla-ros-bridge/catkin_ws catkin clean -y # 若使用catkin_tools catkin_make ``` #### **步骤4:Source环境变量** 编译成功后,`devel/setup.bash`会自动生成: ```bash source devel/setup.bash ``` --- ### **注意事项** 1. **路径规范**:确保`src`目录中的包路径唯一,避免嵌套或重复克隆。 2. **子模块管理**:若从Git仓库克隆,建议使用`git submodule`统一管理依赖。 3. **编译失败排查**:若编译仍失败,检查终端输出的具体错误信息(如依赖缺失)。 --- ### **补充说明** - **`catkin_make` vs `catkin build`**:若使用`catkin_tools`工具链,建议使用`catkin build`,它能更好地处理复杂包依赖。 - **工作空间结构**:标准ROS工作空间结构应确保所有包位于`src`目录下,且无重复名称。
评论 31
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值