控制kobuki底盤 一

2021-07-06 07:54:05 字數 3183 閱讀 5750

(一)aicrobo的成果

有了catkin_ws裡aicrobo_xi系列的package後,分別用不同ternimal啟動:依次為虛擬底盤,rviz,鍵盤控制

roslaunch aicroboxi_bringup fake_aicroboxi.launch

roslaunch aicroboxi_rviz view_mobile.launch

roslaunch kobuki_keyop keyop.launch

使用鍵盤時會提示,是否enable the motor ,按e使能電機後可使用方向鍵控制.

aicrobo寫的鍵盤控制:

roslaunch aicroboxi_teleop keyboard_teleop.launch

按 uio/jkl/m,./ 控制底盤.

(二)三次啟動太麻煩,合成一次

cd ~/catkin_ws/src/aicrobo_xi/

catkin_create_pkg aicrobo_newteleop roscpp rospy std_msgs geometry_msgs/twist

這樣建立的newteleop包下依賴roscpp,rospy,std_msgs等,建立過後產生cmakelists.txt和package.xml檔案.新建乙個launch資料夾,在裡面建立乙個newkeyop.launch的檔案:把上面的啟動的三個檔案的launch組合在乙個檔案裡.

(三)寫乙個自己的按鍵控制代替ros::ok()

1)堵塞式按鍵掃瞄將影響其他程序

//堵塞式按鍵檢測

#include //printf() setbuf()

#include //input_event ev_key

#include //open()

#include //open()

#include //open()

#include //read(),close()

#define dev_path "/dev/input/event3" //difference is possible

int main()

while(1)

} }

} close(keys_fd);

/* 這段無作用

*/return

0;

}

可以檢測並顯示 按鍵的按下和鬆開.

2)非堵塞式按鍵掃瞄不影響其他工作

#include 

#include

#include

#include

#include

#include

static

struct termios ori_attr, cur_attr;

static __inline

int tty_reset(void)

static __inline

int tty_set(void)

static __inline

int kbhit(void)

else

if (retval)

return

1; /* fd_isset(0, &rfds) will be true. */

else

return

0; return0;}

int main()

else

int i=0,j=0;///這樣可以很明顯的看出顯示效果

while(i++<1000)

} if(tty_set_flag == 0)

tty_reset();

return

0;}

這兩段程式非原創.

3)寫成函式,放在單獨的cpp檔案中,生成被包含的標頭檔案.

.cpp檔案

#include "feiduseexit.h"

bool feiduseexit()

} else

int i=0,j=0;///這樣可以很明顯的看出效果非阻塞

while(i++<1000)

if(tty_set_flag == 0)

tty_reset();

return

1;}

.h檔案

#ifndef feiduseexit_h

#define feiduseexit_h

#include

#include

#include

#include

#include

#include

static

struct termios ori_attr, cur_attr;

static __inline

int tty_reset(void)

static __inline

int tty_set(void)

static __inline

int kbhit(void)

else

if (retval)

return

1; /* fd_isset(0, &rfds) will be true. */

else

return

0; return0;}

bool feiduseexit();

#endif

cmakelists.txt

加入類似的結構

add_executable(feidusekaihuanroad src/feidusekaihuanroad.cpp src/feiduseexit.cpp)
啟動檔案的名字:feidusekaihuanroad 後面是包含的cpp

target_link_libraries(feidusekaihuanroad

$)

feiduseexit.h檔案放在catkin_ws的include檔案裡.

按鍵可被檢測和顯示返回ture,按q可以返回false.

控制kobuki底盤 二

一 開環控制小車的速度和角速度 使小車按簡單函式軌跡移動.座標系的建立 差速底盤的正面為初始方向,設初始方向與所建立座標系的夾角 atan f 0 二 計算 1 勻速轉向 由於傳送topic需要以次數i計算.故在設定阻塞頻率rate後大致可估算出w i t rate i w即為speed.angul...

ROS學習記錄(3) Kobuki控制大合集

宣告 本文收錄kobuki所有操作命令,以後都在本文更新。1.啟動kobuki roslaunch kobuki node minimal.launch2.改變顏色或關閉led 通過發布話題 rostopic pub mobile base commands led1 kobuki msgs led...

關於一汽大眾的車型底盤號

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!關於一汽大眾的車型底盤號 一汽大眾的底盤號通常有17位,其中第7 8位合在一起可以表示車型,可是我不知道什麼號碼表示什麼車型,可以有高人指點一下嗎?謝謝了。問題補充 我沒看懂答覆幅哦?我的...