学习Apollo cyberRT时遇到的一些报错及解决方法

文章主要介绍了在学习和使用cyberRT时遇到的两种主要问题及解决方案。一是编译错误‘undeclaredinclusion(s)inrule’,通过添加缺失的依赖声明到BUILD文件中解决了此问题。二是Python参数通信时遇到的错误,尚未找到解决方法。此外,还提到了bash命令找不到的问题,通过编译对应工具并更新环境变量得以解决。

最近在学习cyberRT,遇到了一些令人头秃的报错,折腾了好久才解决一两个问题,所以写这篇文章记录一下,防止自己将来再遇到相同的问题以及遇到相同问题的同学可以少花点时间。

错误1.

ERROR: /apollo/cyber/transport/rtps/BUILD:13:11: undeclared inclusion(s) in rule '//cyber/transport/rtps:attributes_filler':
this rule is missing dependency declarations for the following files included by 'cyber/transport/rtps/attributes_filler.cc':
  'cyber/common/glog/logging.h'
  'cyber/common/glog/raw_logging.h'

这个错误只是其中一种,也可能有其他的undeclared inclusion(s) in rule'...', 但是解决方法都是一样的。以我的这个报错为例,因为缺少依赖声明,所以我们就加上去,打开cyber/common/glog/,

如果没有BUILD文件,直接在该文件目录下打开终端,创建BUILD文件。

touch BUILD

如果是新建的文件,BUILD文件里添加内容

load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
load("//tools:cpplint.bzl", "cpplint")

package(default_visibility = ["//visibility:public"])

cc_library(
    name = "headers",
    hdrs = glob(["*.h"])
)
cpplint()

如果本就有BUILD文件,直接在文件末尾添加

cc_library(
    name = "headers",
    hdrs = glob(["*.h"])
)

然后打开对应的//cyber/transport/rtp文件目录下的BUILD文件,找到名为attributes_filler的块,如下所示

cc_library(
    name = "attributes_filler",
    srcs = ["attributes_filler.cc"],
    hdrs = ["attributes_filler.h"],
    deps = [
        "//cyber/common:log",
        "//cyber/transport/qos",
        "@fastrtps",
    ],
)

在deps末尾添加你新建的BUILD文件的路径,及cc_library块的名称

cc_library(
    name = "attributes_filler",
    srcs = ["attributes_filler.cc"],
    hdrs = ["attributes_filler.h"],
    deps = [
        "//cyber/common:log",
        "//cyber/transport/qos",
        "@fastrtps",
        "//cyber/common/glog:headers",
    ],
)

可能你解决了这一个报错,还会遇到别的依赖声明问题,依样画葫芦,一个一个添加,最后会成功的,加油!!!!

错误2. 学习的路上障碍是真多啊,又碰到了新问题,但是还没有找到解决方法,心塞。

错误发生在使用python编译参数通信时,报错内容如下:

E0209 21:48:36.035142 99159 py_parameter.cc:516] [cyber_py]pyparam_srv get_parameter is false!
E0209 21:48:36.035163 99159 py_parameter.cc:516] [cyber_py]pyparam_srv get_parameter is false!
E0209 21:48:36.035168 99159 py_parameter.cc:516] [cyber_py]pyparam_srv get_parameter is false!

对应的代码如下

    #
    server.set_parameter(parameter.Parameter("type","car_apollo"))
    server.set_parameter(parameter.Parameter("height",1.50))
    server.set_parameter(parameter.Parameter("cameras",2))
    #
    p1 = server.get_parameter("type")
    p2 = server.get_parameter("height")
    p3 = server.get_parameter("cameras")

错误3.今天在学习过程中又出现了一些错误

bash: mainboard: command not found
bash: cyber_launch: command not found  

等,使用source cyber/setup.bash不起作用,可采用下面的方法:

首先使用以下命令,查看相应路径

vim cyber/setup.bash

得到如下结果

#! /usr/bin/env bash
TOP_DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd -P)"
source ${TOP_DIR}/scripts/apollo.bashrc

export APOLLO_BAZEL_DIST_DIR="${APOLLO_CACHE_DIR}/distdir"
export CYBER_PATH="${APOLLO_ROOT_DIR}/cyber"

bazel_bin_path="${APOLLO_ROOT_DIR}/bazel-bin"
mainboard_path="${bazel_bin_path}/cyber/mainboard"
cyber_tool_path="${bazel_bin_path}/cyber/tools"
recorder_path="${cyber_tool_path}/cyber_recorder"
launch_path="${cyber_tool_path}/cyber_launch"
channel_path="${cyber_tool_path}/cyber_channel"
node_path="${cyber_tool_path}/cyber_node"
service_path="${cyber_tool_path}/cyber_service"
monitor_path="${cyber_tool_path}/cyber_monitor"
visualizer_path="${bazel_bin_path}/modules/tools/visualizer"

以 mainboard 为例,编译 mainboard 即可

bazel build cyber/mainboard/...

以 cyber_launch 为例,编译即可

bazel build cyber/tools/cyber_launch/...

然后就可以正常使用该命令了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值