基于ROS搭建简易软件框架实现ROV水下目标跟踪(八)--程序解析之PWM波计算

      项目链接:https://github.com/cabinx/cabin_auv_ws 

      这部分内容相当简单,基本上读懂推进器电机模型文件就很容易能读懂程序。可以查阅之前撰写的关于电机模型文件的文章(链接)。程序对应cabin_controllers/pwm_controller。实际上就是编程实现模型文件中推进器推力与pwm波间的关系的函数。

一、输入输出

        监听topic:

        (1)/command/thrust,格式:cabin_msgs::ThrustStamped,为推力分配模块发布的各推进器推力,重点关注;

        (2)/state/switches,格式:cabin_msgs::SwitchState,置为false时,锁定pwm波为固定值,其不会随推力的改变而改变,置为true时,模块正常工作,算是一个保险小措施,不需要关注;

        (3)/controls/reset,格式:cabin_msgs::ResetControls,pwm波重置,状态改变时,发布重置的初始pwm值,程序中为1500,同时推力记录清零,小功能,不需要关注;

         发布topic:

         /command/pwm ,格式:cabin_msgs::PwmStamped,各推进器pwm波。

        yaml文件:

        (1)机械模型文件,主要确定推进器为正桨(cw)还是反桨(ccw);

        (2)电机模型文件,推进器推力与pwm波关系曲线参数。

二、几个宏定义

#define MIN_PWM 1230
#define MAX_PWM 1770
#define NEUTRAL_PWM 1500

        输出PWM波的范围被限定在区间[1230,1770]上,电机初始状态PWM为1500。

三、载入文件参数

PWMController::LoadParam<std::string>("properties_file", properties_file);
properties = YAML::LoadFile(properties_file);
PWMController::LoadThrusterProperties();

        需要配合pwm_controller.launch阅读。

        重点关注PWMController::LoadThrusterProperties()函数。

//Load thruster types
int numThrusters = properties["properties"]["thrusters"].size();
for(int i = 0; i < numThrusters; i++){
    int type = properties["properties"]["thrusters"][i]["type"].as<int>();
    thrusterType[i] = type;
}

        上述代码段为LoadThrusterProperties()函数读取机械模型参数文件中推进器桨叶为正桨(CW)还是反桨(CCW)信息。

        LoadThrusterProperties()函数剩余部分内容为读取电机模型文件参数,对应launch文件中的<rosparam command="load" …>。

四、PWMController::ThrustCB()函数

        每收到一个推进器推力矩阵信息,通过PWMController::Thrust2pwm()函数计算每个推机器需要的PWM波信息,然后发布。

五、PWMController::Thrust2pwm()函数

        函数参数如下:

        Thrust2pwm(推进器应提供的推力,桨叶类型,推进器名称)。

        函数输出为当前推进器提供推力所需的pwm波值,int型。

        以demo中为例,电机模型文件thruster_force_vs_pwm.yaml中推进器推力与pwm波间关系在不同的推力区间有不同的映射关系,每个区段是线性的。Thrust2pwm()函数就是实现了该分段函数。

ROS(机器人操作系统)是一款成熟的机器人操作系统,具有完备的生态体系,未来的发展意义可以成为机器人届中的”Linux、Android“。机器人的开发学习要综合软硬件的协同开发,硬件开发有些部分倾向于底层的设计和使用。软件开发可以依托C++、PYTHON等高级语言进行ROS接口应用开发,或者兼容ROS系统。本系列的ROS开发课程包含下位机开发、上位机开发、基于MBD(基于模型设计的开发)等。下位机作为机器人设计的基础部分是学习机器人操作系统必经之路,下位机我们通常会选择Arduino(适合学习不适合工程,代码执行效率差)、STM32系列产品(工程应用广泛,适合学习和工程开发,代码针对性强),当然还有NXP系列、51系列、TI DSP等,后期可以根据产品的性能和成本要求去考虑;上位机部分,主要是基于工控机、树莓派Raspberry、英伟达Jetson等可以运行操作系统的嵌入式设备再基于ROS操作系统进行实训学习。网络上对于ROS类的教学比较多,但是系统化从底层向高阶层层递升的教学方法偏少,知识碎片化严重,对机器人开发工程师深远的发展有负面影响,基于此本人通过多年自身的学习和工程实践,将机器人开发课程系统化、具象化、模块化地引导式学习,每节课程都有相应的课件和代码引导。对致力于机器人事业的学生有推动作用,且增强信心,系统化自己的机器人知识。为自己的职业规划和事业发展奠定坚实基础。最后,你们的支持,就是老师不断创作的动力!老师会不断更新机器人类相关知识,希望”与子同裳“。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值