ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...
模塊對應(yīng)cabin_controllers/serial_to_mcu。模塊實(shí)現(xiàn)的功能為監(jiān)聽網(wǎng)絡(luò)中PWM矩陣信息,將其轉(zhuǎn)換成十六進(jìn)制數(shù)據(jù)通過串口下發(fā)至MCU,實(shí)現(xiàn)對推進(jìn)器電機(jī)的控制。模塊數(shù)據(jù)的串口通信借助了ros的serial工具包(sudo apt-get install ros-melodic-serial),網(wǎng)上比較多使用方法,在此就不做介紹了。當(dāng)然我還是推薦源碼安裝(鏈接)。
在demo中,實(shí)際上水下燈的控制信息亦通過串口下發(fā)至MCU,實(shí)現(xiàn)對燈亮度的控制。
為了方便閱讀程序,在此還是貼出實(shí)驗(yàn)中自定義的電機(jī)協(xié)議。
水下燈的協(xié)議:
一、輸入輸出
監(jiān)聽topic:
(1)/command/pwm,格式:cabin_msgs::PwmStamped,推進(jìn)器PWM矩陣信息;
(2)/command/light_intensity,格式:std_msgs::Int64,水下燈亮度信息;
輸出:
HEX數(shù)據(jù)流。
二、端口號及baudrate的設(shè)置
nh_private也可以在serial_to_mcu.launch中隨時調(diào)整端口號及baudrate。
三、串口通信初始化設(shè)置
try{ser.setPort(serial_port_);ser.setBaudrate(baudrate_);serial::Timeout to = serial::Timeout::simpleTimeout(1000);ser.setTimeout(to);ser.open(); } catch(serial::IOException& e){ROS_ERROR_STREAM("Unable to open port!!!");return -1; }if(ser.isOpen()){ROS_INFO_STREAM("Serial Port initialized..."); } else{return -1; }若端口號及baudrate配置正確,串口應(yīng)該能正常打開。注意,程序運(yùn)行前應(yīng)給端口權(quán)限,否則無法通信。以demo中的測試為例,端口號為ttyUSB0,指令sudo chmod 777 /dev/ttyUSB0。
四、pwmToHex()函數(shù)
數(shù)據(jù)由十進(jìn)制轉(zhuǎn)十六進(jìn)制。
五、sendPWMData()函數(shù)
每收到一個PWM波矩陣信息,將其由十進(jìn)制轉(zhuǎn)換成十六進(jìn)制后,依據(jù)協(xié)議封裝, 下發(fā)。
ser.write(s_buffer, s_buffer_size);上述代碼段為下發(fā)一次數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开机未发现nvidia控制面板_Wind
- 下一篇: s7300plc串口通信_西门子S7-3