Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

some question about channel's message type #188

Open
wqklihbf opened this issue Mar 25, 2024 · 1 comment
Open

some question about channel's message type #188

wqklihbf opened this issue Mar 25, 2024 · 1 comment

Comments

@wqklihbf
Copy link

wqklihbf commented Mar 25, 2024

Note: If you have a general support question and are looking for a quicker response, please checkout our discord channel for answers from the community:
https://bbs.carla.org.cn/ask

In what area(s)?

/area runtime

/area operator

/area placement

/area docs

/area test-and-release

Ask your question here

  1. 当使用cyber_montior查看数据通道时,我注意到一些数据通道的数据很少,比如/apollo/sensor/gnss/best_pose数据通道只有经纬度与高度:
    2024-03-20 18-23-27 的屏幕截图
    而完整的数据还包括其它部分:
    image
    但我在Carla官网发现gnss传感器的数据只包括经纬度与高度,那么其它的数据我要怎么获得呢?
  2. carla_bridge/actor/ego_vehicle.py中,我看到了这个数据通道的定义:
        self.localization_status_writer = node.new_writer(
            "/apollo/localization/msf_status",
            LocalizationStatus,
            qos_depth=10)

我没有找到对它的引用,但是在使用rtk定位时,该通道却有数据,这是为什么?
3. 在使用rtk_localization时,/apollo/localization/pose数据通道的数据在闪烁,如表中所示有两种数据,这是不是说明有两个writer在向这个通道写入数据?
2024-03-27 19-47-01 的屏幕截图

@cfs4819
Copy link
Contributor

cfs4819 commented Apr 3, 2024

前置知识

这个项目的本意是由carla_apollo_bridge为apollo提供精确的地理位置和朝向数据,而不经过apollo本身的定位模块的处理。

一般的情况下,apollo的定位模块(MSF、RTK)都需要订阅传感器数据,比如/apollo/sensor/gnss/imu/apollo/sensor/lidar128/compensator/PointCloud2/apollo/sensor/gnss/best_pose等,经过处理后输出位置到/apollo/localization/pose通道。但是carla_apollo_bridge直接绕过这些定位模块为/apollo/localization/pose通道提供了精确的地理位置数据。因此之前其他传感器提供的数据并没有被Apollo使用。

回到你提出的问题

1. 关于 /apollo/sensor/gnss/best_pose数据

Carla本身也是通过获取ego_vehicle(即自动驾驶系统控制的车辆)的当前transform,并经过坐标转换得到Apollo所需的定位信息,它本身无法提供其他包括卫星数量以及信号强度等数据在内的GNSS数据,关于GNSS的其他数据你可以参考gnss_best_pose.proto中对各个消息的定义,为你引用如下:

message GnssBestPose {
  optional apollo.common.Header header = 1;
  optional double measurement_time = 2;  // 以秒为单位
  optional SolutionStatus sol_status = 3;
  optional SolutionType sol_type = 4;
  optional double latitude = 5;   // 以度为单位
  optional double longitude = 6;   // 以度为单位
  optional double height_msl = 7;  // 平均海平面以上高度(米)
  optional float undulation = 8;   // undulation = height_wgs84 - height_msl
  optional DatumId datum_id = 9;   // 数据 ID 号
  optional float latitude_std_dev = 10;   // 纬度标准差(m)
  optional float longitude_std_dev = 11;  // 经度标准差(m)
  optional float height_std_dev = 12;     // 高度标准差(米)
  optional bytes base_station_id = 13;    // 基站ID
  optional float differential_age = 14;   // 差分位置年龄(秒)
  optional float solution_age = 15;       // 解决方案年龄(秒)
  optional uint32 num_sats_tracked = 16;  // 跟踪的卫星数量
  // 解决方案中使用的卫星数量
  optional uint32 num_sats_in_solution = 17;
  // 解决方案中使用的 L1/E1/B1 卫星数量
  optional uint32 num_sats_l1 = 18;
  // 解决方案中使用的多频卫星数量
  optional uint32 num_sats_multi = 19;
  optional uint32 reserved = 20;  // reserved
  // 扩展解决方案状态 - 仅 OEMV 及更高版本
  optional uint32 extended_solution_status = 21;
  optional uint32 galileo_beidou_used_mask = 22;
  optional uint32 gps_glonass_used_mask = 23;
}

这些数据均为可选的,你可以根据自己的喜好以及项目的需求定制,并在carla_apollo_bridge/carla_bridge/sensor/gnss.py中的sensor_data_updated()函数下进行编辑。但是正如前面所说的,GNSS数据并没有被使用,仅作为你的项目需要定制。

2. 关于手动启动RTK定位的情况

当你在Dreamview中启动Localization模块时,Apollo会根据配置文件(通常位于apollo-r8.0.0/modules/localization/conf/localization_config.pb.txt)选择定位方式(MSF、RTK,默认MSF)并启动响应的节点,这两个节点均会输出到/apollo/localization/pose通道(定义在....../localization/conf/msf_localization.pb.txt...../localization/conf/rtk_localization.pb.txt)中,并且在...../localization/conf/rtk_localization.pb.txt的定义中,它还额外输出了localization_status_topic/apollo/localization/msf_status通道。

因此,即使carla_apollo_bridge在后续中没有使用localization_status_writer,如果你手动启动了MSF定位,其节点也会输出数据到/apollo/localization/msf_status中,我并没有注意到在carla_apollo_bridge的默认情况下/apollo/localization/msf_status中存在数据输出。

另外,我相信如果你只是启动了RTK定位,/apollo/localization/msf_status也不应该有数据输出

3. 关于/apollo/localization/pose数据重复

正如前面所说的,默认情况下,carla_apollo_bridge在/apollo/localization/pose通道中为Apollo提供了精确位置信息,其frame_id是"novatel"

当你手动启动了RTK定位,则该模块也会输出一个数据到/apollo/localization/pose通道中,导致了数据的重复,根据该模块的配置文件apollo-r8.0.0/modules/localization/conf/msf_localization.pb.txt,它的数据中的broadcast_tf_child_frame_id是"localization",正好对应了你所采集到的两个数据

因此在这种情况下,如果你想要使用Apollo提供的RTK模块,建议你手动关闭carla_apollo_bridge中的发布位置信息的节点,具体来说,你可以通过注释掉carla_bridge/actor/ego_vehicle.py中的第127行 self.write_localization(),来防止消息的重复发送

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants