Ubuntu20.04系统Ros2-foxy版本与单片机实现串口通信

一、foxy版本serial包的下载

ROS2的包都安装在了/opt/ros/foxy/include/里,所以索性直接把serial包安装在include里面。

具体操作:

       1. ctrl+alt+T 打开一个新的终端

        2.进入ROS2根目录

cd /opt/ros/foxy/include/

        3.下载ros2_serial包

sudo git clone https://github.com/ZhaoXiangBox/serial.git

        4.进入serial包,编译

cd serial
mkdir build
cd build
cmake ..
make

        5.再进行install,ros2包则安装完毕

sudo make install

二、创建ros2工作空间

1.创建工作空间

mkdir -p ros_ws/src && cd ros_ws/src

 2.将刚才下载的serial包复制到当前文件夹

然后编译

colcon build

3.创建ros工作包

ros2 pkg create --build-type ament_cmake serial_port

4.进入src文件

cd serial_port/src

三、编写接收节点

1.创建.cpp文件

touch lis.cpp

并编写代码

#include "rclcpp/rclcpp.hpp"
#include "serial/serial.h"

class SerialNode : public rclcpp::Node
{
public:
    SerialNode() : Node("serial_node")
    {
        serial::Serial ser;
        try
        {
            ser.setPort("/dev/ttyACM0");
            ser.setBaudrate(115200);
            serial::Timeout to = serial::Timeout::simpleTimeout(1000);
            ser.setTimeout(to);
            ser.open();
        }
        catch (serial::IOException& e)
        {
            RCLCPP_ERROR(this->get_logger(), "Failed to open serial port.");
        }

        rclcpp::Rate loop_rate(10);
        while (rclcpp::ok())
        {
            // Read data from serial port
            if (ser.available())
            {
                std::string data = ser.read(ser.available());
                RCLCPP_INFO(this->get_logger(), "Received: %s", data.c_str());
            }
            // Write data to serial port
            // ser.write("Hello, serial!");
            loop_rate.sleep();
        }
    }
};

int main(int argc, char** argv)
{
    rclcpp::init(argc, argv);
    auto node = std::make_shared<SerialNode>("lis");
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

2.编辑CMakeLists.txt文件,添加依赖

        在文件的最下面添加

find_package(rclcpp REQUIRED)
find_package(serial REQUIRED)

#添加可执行文件
add_executable(lis src/lis.cpp)
ament_target_dependencies(lis rclcpp  serial)

#将其安装到install目录
install(TARGETS
lis
DESTINATION lib/${PROJECT_NAME})

3.接着编辑package.xml文件

        在<buildtool_depend>ament_cmake</buildtool_depend>下添加:

<buildtool_depend>rclcpp</buildtool_depend>
<buildtool_depend>serial</buildtool_depend>

四、单片机串口配置

        1.单片机配置好串口,我这里是向外发送“ab”。

        2.单片机与电脑用usb线连接。

        3.查看串口设备

dmesg | grep ttyS*

        4 .根据串口号修改lis.cpp文件中的ser.setPort("/dev/ttyACM0");

一般单片机如果配置了虚拟串口的话,串口号为/dev/ttyUSB,如果配置USART串口的话就是ttyACM0。当然具体请根据查看串口设备后的端口号。

五、编译与运行

        1.回到/ros_ws目录

colcon build
source install/setup.bash
ros2 run serial_port lis

        2.此时终端中收到了单片机的消息

感谢阅读,如有错误,欢迎指正。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值