部落格位址:https://blog.csdn.net/xiaokai1999
筆者裝置:北通 阿修羅
一共有14個按鈕和4個線性杆
1. 使用外接搖桿控制小機器人
1.1 安裝相關功能包
- 安裝ROS遊戲杆功能包$ sudo apt-get install ros-melodic-joystick-drivers$ ls /dev/input/可以看到,js0就是搖桿所建立的端口
ROS聯合webots實戰案例(三)使用外接搖桿控制機器人[2] 7.jpg
3. 我們可以使用jstest指令檢視他的工作狀态$ jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (Microsoft X-Box 360 pad) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y)
and 11 buttons (BtnA, BtnB, BtnX, BtnY, BtnTL, BtnTR, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR).
Testing ... (interrupt to exit)
Axes: 0: 0 1: 0 2:-32767 3: 0 4: 0 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off随意按動搖桿上的任意一個按鍵,數值都會發生改變1.2 測試Joy功能包$ roscore
$ rosrun joy joy_node如果配置無誤,可以看到[ INFO] [1610344484.707536624]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.$ rostopic echo /joy我們随便按一個搖桿上的按鈕可以看到
ROS聯合webots實戰案例(三)使用外接搖桿控制機器人[2] 8.jpg
axes代表軸向輸入,buttons代表按鈕輸入
- 首先,将搖桿連接配接到電腦上,使用如下代碼,檢查搖桿是否可以被識别到
- 測試搖桿在ros中的功能,使用joy和joy_node功能包
-
發送搖桿動作資訊
joy_node功能包使用/joy話題釋出搖桿資訊,可以使用如下指令檢視
-
可以使用下面的指令擷取/joy釋出消息的類型$ rostopic type /joy
sensor_msgs/Joy$ rosmsg show sensor_msgs/Joy
std_msgs/Header header
uint32 seq
time stamp
string frame_id
float32[] axes
int32[] buttons
- 使用下面指令檢視消息中使用的字段
1.3 編寫搖桿控制機器人的程式
在上文中我們提到了/joy釋出資訊的類型為
sensor_msgs/Joy
,頭檔案就需要加入
#include <sensor_msgs/Joy.h>
我們使用搖桿上的X(左轉),Y(前進),B(右轉),A(後退)來控制機器人的運動。
9.jpg
用搖桿控制的方式和鍵盤控制的方式隻有兩個地方寫法不同,如下:
整體程式請看
ROS聯合webots實戰案例(三)在webots中使用ROS控制小機器人
1. 訂閱/joy話題ros::Subscriber joySub;
joySub = n->subscribe("/joy",1,JoyDataCallback);搖桿傳回函數/*******************************************************
* Function name :搖桿傳回函數
* Description :當搖桿動作,就會進入此函數内
* Parameter :
@value 傳回的值
* Return :無
**********************************************************/
void JoyDataCallback(const sensor_msgs::Joy::ConstPtr &value)
{
// 發送控制變量
int send =0;
//ROS_INFO("sub keyboard value = %d",a);
if (value->buttons[2])
{
// 左轉
speeds[0] = -5.0;
speeds[1] = 5.0;
send=1;
}
else if(value->buttons[3])
{
// 前進
speeds[0] = 5.0;
speeds[1] = 5.0;
send=1;
}
else if(value->buttons[0])
{
// 後退
speeds[0] = -5.0;
speeds[1] = -5.0;
send=1;
}
else if(value->buttons[1])
{
// 右轉
speeds[0] = 5.0;
speeds[1] = -5.0;
send=1;
}
//當接收到資訊時才會更新速度值
if (send)
{
updateSpeed();
send=0;
}
}2.最後配置
CMakeList.txt
,在最下面添加:add_executable(velocity_joy src/velocity_joy.cpp)
add_dependencies(velocity_joy webots_ros_generate_messages_cpp)
target_link_libraries(velocity_joy ${catkin_LIBRARIES})編譯功能包 $ cd catkin_ws/
$ catkin_make運作launch檔案,可能不會那麼快可以TAB出來,打進去一樣可以運作$ roslaunch webots_demo webots.launch打開joy功能包中的joy_node節點用于擷取搖桿資料$ rosrun joy joy_node運作編寫好的代碼$ rosrun webots_demo velocity_joy效果undefined
3.gif![]()
ROS聯合webots實戰案例(三)使用外接搖桿控制機器人[2]