关于在ros2中使用#include <serial/serial.h>报错问题解决
·
前言
主包在用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>的报错了(虽然图示上还有报错,但是那是主包自己的代码报错,检查了好几遍日志发现这个接口的报错日志已经没了)
更多推荐

所有评论(0)