ros2 .idl文件生成C、C++代码
一、包目录结构
rosidl_generator_c 依赖rosidl_cmake、rosidl_typesupport_interface、ament_index_python、rosidl_parser
rosidl_generator_cpp 依赖 rosidl_parser、rosidl_runtime_cpp、rosidl_generator_c
rosidl_parser :The parser for .idl
ROS interface files.
rosidl_generator_c: python工具包
usage: rosidl_generator_c [-h] --generator-arguments-file GENERATOR_ARGUMENTS_FILEGenerate the C ROS interfaces.optional arguments:-h, --help show this help message and exit--generator-arguments-file GENERATOR_ARGUMENTS_FILEThe location of the file containing the generator arguments (default: None)
代码运行顺序
1、rosidl_generator_c -> main()
2、rosidl_generator_c ->generate_c(args.generator_arguments_file)
3、rosidl_cmake -> generate_files()
eg:test_msgs包,编译生成rosidl_generator_c__arguments.json 做为参数
在ros 的build临时目录里
总结:
1、使用python lark库进行idl 文本解析,返回解析后的文本树。
2、使用interpreter.invoke转换,将文本树内容按文本替换,后保存最终生成文件。
Lark 是一个在 Python 中使用的强大语法分析器,它支持Earley和LALR(1)两种解析算法,并且使用EBNF语法编写文法。以下是Lark的一些基本用法。
另外,roiidl_parser包提高idl转到AST png脚本,
运行脚本前需要安装依赖库
``
sudo pip3 install pydot
sudo apt-get install graphviz