【ROS2】踩坑一、自定义消息编译报错

按照官方文档步骤创建自定义消息时,在编译生成头文件这步时,一直报错,反复查看CMakeList.txt和Package.xml文件,跟官方知道文件一模一样,但是就是报错。报错内容如下:

CMake Error at /opt/ros/dashing/share/rosidl_adapter/cmake/rosidl_adapt_interfaces.cmake:60 (message):
  execute_process(/usr/bin/python3 -m rosidl_adapter --package-name
  person_interface --arguments-file
  /home/xs_sjw/ros2_interface/build/person_interface/rosidl_adapter__arguments__person_interface.json
  --output-dir
  /home/xs_sjw/ros2_interface/build/person_interface/rosidl_adapter/person_interface
  --output-file
  /home/xs_sjw/ros2_interface/build/person_interface/rosidl_adapter/person_interface.idls)
  returned error code 1:

  Traceback (most recent call last):

    File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
      "__main__", mod_spec)
    File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
      exec(code, run_globals)
    File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_adapter/__main__.py", line 19, in <module>
      sys.exit(main())
    File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_adapter/main.py", line 55, in main
      pathlib.Path(relative_path), output_dir)
    File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_adapter/__init__.py", line 20, in convert_to_idl
      package_dir, package_name, interface_file, output_dir / 'msg')
    File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_adapter/msg/__init__.py", line 28, in convert_msg_to_idl
      msg = parse_message_string(package_name, input_file.stem, content)
    File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_adapter/parser.py", line 519, in parse_message_string
      constants.append(Constant(type_string, name, value))
    File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_adapter/parser.py", line 314, in __init__
      raise NameError("the constant name '%s' is not valid" % name)

  NameError: the constant name 'name' is not valid

Call Stack (most recent call first):
  /opt/ros/dashing/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:130 (rosidl_adapt_interfaces)
  CMakeLists.txt:36 (rosidl_generate_interfaces)

最后发现.msg文件在定义消息类型时,在文件中进行赋值操作的变量必须是大写,否则就会报错。
错误例子:

bool female=true    #赋值操作时,变量字母必须是大写,否则编译会报错
bool male=false

string name
int64 age
float64 height
string address

正确写法:

bool FEMALE=true    #赋值操作时,变量字母必须是大写,否则编译会报错
bool MALE=false

string name
int64 age
float64 height
string address

将小写改为大写后再编译就不再报错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值