rc视觉工作日常

RC视觉

由于硬件条件限制,最后选择的开发方案为主机+jetson nano交叉开发的方案,
计划实现的目标为识别到某个特征物体(比如运动的羽毛球)之后,将处理之后的消息通过串口发送给单片机,并且能够从单片机读取信息实现模式切换(和RM本质上差别不大,只不过RM给的特征更明显)

主机开发环境:
Ubuntu 19.04 x86_64
vscode 1.37.1
opencv 3.4.7
cmake 3.13.4

Jetson nano开发环境:
ubuntu 18.04 LTS
code-oss 1.32.0(arm64下的vscode)
opencv 3.4.7
cmake 3.5.1

目前先实现串口通信的问题,RM那边有现成的Serialport.hpp可以用,那我就直接拿来用了
直接跑会报错无法打开串口,一般是权限问题,解决方案见下面
https://blog.csdn.net/qq_18507467/article/details/90444757

然后遇到了一个比较神奇的问题,直接发送每次只能发一个字符过去,怀疑是轮子有问题,仔细一看,确实有点问题

bool Serialport::send(char *str)
{
    buffer = str;
    if(fd < 0 || write(fd, buffer, 1) < 0)
    {
        perror("\e[31m\e[1m ERROR:串口通信失败 \e[0m");
	
        return false;
    }
    
    return true;
}

所以让我来把这个轮子稍加改造一下

bool Serialport::send(char *str)
{
    p = str;
    while(*(char*)p != 0)
	{
		int res = 0;
		res = write(fd,(char*)p, 1);
		if(res != 1)
        {
            printf("send %c error/n", *(char*)p); 
            return false;
        }
		//else printf("send %c ok/n", *(char*)p);
		++p;
	}
    return true;
}

就可以实现正常发送了

发个hello world庆祝一下嘿嘿

#include "../Inc/Header.h"
#include "../Inc/Serial.hpp"

// sudo vim /etc/udev/rules.d/70-ttyusb.rules 或 切换至root后键入vi /etc/udev/rules.d/70-ttyusb.rules

// 增加如下内容:

// KERNEL=="ttyUSB[0-9]*",MODE="0666"

int main()
{
    cout << "serialport test starting" << endl;

    Serialport test("/dev/ttyUSB0"); 
    test.set_opt(115200,8,'N',1);

    while (1)
    {
        test.send((char *)"hello world\r\n");
        cout << "message send" <<endl;
        sleep(1);
    }
    
    return 0;
}

发送这边搞定之后,我来操作一下接收,下面里面的一堆操作比较值得借鉴,

https://blog.csdn.net/wanruirui/article/details/5907168

接收也是一会就搞定了

bool Serialport::receive(void)
{
    int res;
    if((res = read(fd,(char*)rData,512))>0)
    {
        rData[res + 1] = '\0';
        printf("%s",rData);
        return true;
    }
    else
        return false;
}

来个自收自发high一下

#include "../Inc/Header.h"
#include "../Inc/Serial.hpp"

// sudo vim /etc/udev/rules.d/70-ttyusb.rules 或 切换至root后键入vi /etc/udev/rules.d/70-ttyusb.rules

// 增加如下内容:

// KERNEL=="ttyUSB[0-9]*",MODE="0666"

int main()
{
    cout << "serialport test starting" << endl;

    Serialport test("/dev/ttyUSB0"); 
    test.set_opt(115200,8,'N',1);

    while (1)
    {
        test.send((char *)"hello world\r\n");
 //       cout << "message send" <<endl;
        test.receive();
        sleep(1);
    }
    
    return 0;
}

然后往jetson nano上面移植一下,希望不要出什么神奇的问题

ok,没出啥大问题,就是还是避免不了在jetson nano上再build一下,因为两边用的cmake不一样,直接跑可能会出一些神奇的bug

串口这边就算是已经跑通了,后续可能会根据具体的通讯协议再做一些更改

然后就是我们快乐的本职工作——识别运动目标

to be continue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值