yabhoom智能机器人学习记录——(一)USB设备绑定

        本人菜鸟老男人,以前做过一些PLC的项目,也做过一些单片机的简单项目,经验和资质少的可怜,今年7月份,接触到了ROS操作系统,很受鼓舞,想来自己也已经到了不让霍霍的年龄了,于是决定用未来的课余时间学习一下该系统,希望能看到我这些文章的朋友多扔板砖。

        废话说太多,但是还要罗嗦几句,这些东西都是自己的一些调试随笔,可能也不会去鼓捣设计版式什么的,也就是调试到哪里,写到哪里,主要还是给自己这个老家伙留一点记录,等到那天痴呆了,可以翻过来看看曾经走过的一些零碎,所以还是上面那段话的最后一句,欢迎大家的板砖。

        说了不说废话了,还是要说一些废话,本人工科出身,没有任何机器人的经验,yabhoom的小周老师声音很好听。。。不是,是yabhoom的很多资料都是python语言做的源代码,无奈我曾经所有的项目都是c代码和类C的代码,所以咬了咬牙,决定自己重新安装了树梅派的系统,自己从底层开始,边学边记录,看自己学不动的时候能积累多少东西吧。

        废话真是越说越多了。。。看来真的是老了。。。

        树梅派不知道啥版本的,以后的项目肯定是用工控机,所以也不纠结他了,外观上来看4个usb正好,一个游戏手柄,一个深度相机,一个激光雷达,一个对底层驱动板子的接口,当然,他们的USB扩展板上还有一些,但是我还是尽量的把设备直接插在了树梅派上,全无道理,纯粹是老了,怕他们分开了寂寞。

        今天分享的内容非常简单,就是树梅派上如何固定USB当做一个串口,给别的设备发消息,这显然很重要,毕竟后面不论轮子的驱动方式是个板子还是PLC总得对外有个接口,以太网啥的固然好,但是我老了。。。想弄的简单点。

        我参考的视频是这个

ROS-USB串口使用_哔哩哔哩_bilibili

        大神讲的非常非常的好,要不我就不说了。。。算了还是说两句吧,如果侵权了,请大神不要告我。。。

        首先先安装一下ROS的依赖包,至于啥是依赖包我也不知道,我总是感觉是一些底层的驱动,和一些中间层的东西,然后以最灵活的方式呈现给应用层中所需要的一些东西吧,先这么理解吧,反正就算错了,我也不管。。。

       

sudo apt-get install ros-noetic-serial

        安装完成后,可以像视频程序里面说的用roscd命令检查一下,就下面这个

roscd serial

        安装好了,就开始操作,调试串口最基本的就是接一个USB转232的线弄到别的电脑上,树梅派发,电脑收。我用的是深圳宇泰科技的UT-890好像插上,自己就识别了。但是我自己电脑上的ubuntu就识别不了,还是问官方要了一个包,这个包拷贝进去就能用了,大家想要的可以私信我。

        然后就是开始绑定USB口。按视频流程来:

cd /etc/udev/rules.d
sudo touch usb.rules
sudo nano usb.rules

        然后就可以进入一个嘿嘿界面,当然这个嘿嘿的界面不能用vim的一些指令。不管三七二十八,复制下面这个进去:

KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",MODE:="0777",SYMLINK+="PISerial"

        对了,这里有个问题,就是必须要有一个设备带CH340芯片,并且可以发送数据(我就是用驱动板连接到我们树梅派上的,因为它会返回当前板子上的一些数据)。idVendoridProduct 都是lsusb这个指令查询出来的。

        绑定好了可以用这个指令看一眼

        

ls -l /dev |grep ttyUSB

        然后两个USB转232线,中间一个DB9交叉线,就可以发送数据了。

        测试程序下面这一堆:

        

#include <ros/ros.h>
#include <serial/serial.h>

using namespace std;

string port = "/dev/PIserial";
//string port = "/dev/ttyUSB1";
unsigned int baudrate = 115200;
serial::Serial ser;

unsigned char send_lamp_data[9] = {0xff,0xfc,0x07,0x05,0xff,0,0x00,0,0xff};
unsigned char recv_data[100];


int main(int argc, char  *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"usbserial_node");
    ros::NodeHandle nh("~");

    try
    {
        ser.setPort(port);
        ser.setBaudrate(baudrate);
        serial::Timeout to = serial::Timeout::simpleTimeout(1000);
        ser.setTimeout(to);
        ser.open();
    }
    catch(const std::exception& e)
    {
        ROS_ERROR_STREAM("Unable to open port ");
        return -1;
    }
    if(ser.isOpen()){
        ROS_INFO("usb serial port initialized");
    }
    else{
        return -1;
    }
    ros::Rate loop_rate(10);
    while(ros::ok())
    {
        if(ser.available()){
            #if 0
            ROS_INFO("reading from serial port");
            ser.read(recv_data,ser.available());
            for(int i=0;i<sizeof(recv_data);i++)
                cout<<std::hex <<(recv_data[i] & 0xff)<<" ";
            cout<<endl;
            cout<<endl;
            #endif
        }
        #if 1
        ROS_INFO("发送%ld个字节.",sizeof(send_lamp_data));
        unsigned int temp = 0;
        for(int i= 2;i<sizeof(send_lamp_data)-1;i++)
        {
                temp += send_lamp_data[i];
        }
        ROS_INFO("Send data sum = %x.",temp);
        send_lamp_data[sizeof(send_lamp_data)-1]=temp;
        ser.write(send_lamp_data, sizeof(send_lamp_data));
        #endif
        ros::spinOnce();
        loop_rate.sleep();
    }
    return 0;
}

是的,使用了rosrun后,他能用了。。。。

哦对了,建功能包的依赖项是这些:

roscpp

rospy

serial

std_msgs

明天再记录无线游戏手柄的吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值