前言

主包在用ros2写机械臂的抓取代码时,借助工具用了#include <serial/serial.h>串口通信包(准确来说应该叫串行通讯库),但是这个库是ros1中使用的,所以就报出来了如下的错误

但是,这个包ros2应该是也可以使用的,但是默认的话ros2不会用而且也没有对应的二进制安装方法(也可能主包没找到),所以就运用了从github拉取的方法,如下

解决方法

1.直接运行拉取命令(在你的工作空间下拉取)

git clone https://github.com/wjwwood/serial.git

2.改txt文件以及xml文件

如果现在直接make的话是不行的不然会报错,因为默认的make环境是ros1的,所以要改一下txt文件和xml文件如下:

txt文件是这个

cmake_minimum_required(VERSION 3.5)
project(serial)

# Find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)

# Include directories
include_directories(include)

# Sources
set(serial_SRCS
    src/serial.cc
    include/serial/serial.h
    include/serial/v8stdint.h
)
if(APPLE)
    # If OSX
    list(APPEND serial_SRCS src/impl/unix.cc)
    list(APPEND serial_SRCS src/impl/list_ports/list_ports_osx.cc)
elseif(UNIX)
    # If Unix
    list(APPEND serial_SRCS src/impl/unix.cc)
    list(APPEND serial_SRCS src/impl/list_ports/list_ports_linux.cc)
else()
    # If Windows
    list(APPEND serial_SRCS src/impl/win.cc)
    list(APPEND serial_SRCS src/impl/list_ports/list_ports_win.cc)
endif()

# Add serial library
add_library(${PROJECT_NAME} ${serial_SRCS})
if(UNIX AND NOT APPLE)
    target_link_libraries(${PROJECT_NAME} rt pthread)
elseif(WIN32)
    target_link_libraries(${PROJECT_NAME} setupapi)
endif()

# Example executable
add_executable(serial_example examples/serial_example.cc)
target_link_libraries(serial_example ${PROJECT_NAME})

# Install targets
install(TARGETS ${PROJECT_NAME} serial_example
    ARCHIVE DESTINATION lib/${PROJECT_NAME}
    LIBRARY DESTINATION lib/${PROJECT_NAME}
    RUNTIME DESTINATION lib/${PROJECT_NAME}
)

# Install headers
install(DIRECTORY include/serial
    DESTINATION include
)

# Ament package
ament_package()

xml代码如下    

<?xml version="1.0"?>
<package format="3">
  <name>serial</name>
  <version>1.2.1</version>
  <description>
    Serial is a cross-platform, simple to use library for using serial ports on computers.
    This library provides a C++, object-oriented interface for interacting with RS-232
    like devices on Linux and Windows.
  </description>

  <maintainer email="william@osrfoundation.org">William Woodall</maintainer>

  <license>MIT</license>

  <url type="website">http://wjwwood.github.com/serial/</url>
  <url type="repository">https://github.com/wjwwood/serial</url>
  <url type="bugtracker">https://github.com/wjwwood/serial/issues</url>

  <author email="wjwwood@gmail.com">William Woodall</author>
  <author email="ash.gti@gmail.com">John Harrison</author>

  <buildtool_depend>ament_cmake</buildtool_depend>
  <exec_depend>rclcpp</exec_depend>
</package>

改完之后就可以运行如下

cd serial
mkdir build
cd build
cmake ..
make
sudo make install

3.最终运行效果

现在就没有找不到#include <serial/serial.h>的报错了(虽然图示上还有报错,但是那是主包自己的代码报错,检查了好几遍日志发现这个接口的报错日志已经没了)

Logo

更多推荐