日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

罗技G29方向盘linux下的开发

發布時間:2023/12/10 linux 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 罗技G29方向盘linux下的开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

git項目:rc-joystick
RemoteControl
JSTestG29

(1)檢查端口并讀取方向盤數據
參考博客
項目上需要使用羅技(logitech) G29 游戲方向盤來進行演示遠程駕駛。

羅技(logitech) G29 游戲方向盤與window系統有專門的“logitech 游戲軟件”,可以對其驅動與設置,但是window系統要獲取方向盤數據,并進行定制開發好像要借助unity來實現,這個與我們主研方向不一致,所以沒必要時就不走這條路。

在linux系統下,有沒有辦法獲取方向盤數據?答案是肯定的。

當我們將G29連接上電腦時,在/proc/bus/input/devices 中會多出一個設備:/dev/input/event11 (或者 /dev/input/js0)

這個設備文件就是我們的G29的input節點,當我們轉動方向,或者踩油門時,這個節點上都會有數據產生。

可以通過以下命令查看:

cat /dev/input/js0 | hexdump

但這個打印出來的是原始的hex數據,沒有可讀性,那現在問題就是:如何將這個數據解析成具體的可讀的數據?

從網上找了許久的資料,沒有找到可參考的。無意間卻發現了一個操縱桿的校準工具:jstest-gtk

可以通過命令進行安裝:

apt-get install jstest-gtk

運行后(jstest-gtk /dev/input/js0 ),有一圖形界面,可以看到當操作g29時,數據在界面上都有對應的顯示,

方向盤、油門、剎車等,都有數據條,也就是說這個工具已經幫我們把 cat /dev/input/js0 | hexdump 進行了轉換,

那我們就可以基于這個源碼去開發了,(源碼下載地址:https://download.csdn.net/download/amlinsan/12274982)

拿到jstest-gtk-0.1.0后,要安裝以下工具:

apt-get install scons

apt-get install cmake

apt-get install sigc++

apt-get install gtkmm-2.4

apt-get install libboost-all-dev

如果是ubuntu 14.04的話,需要在軟件中心安裝:gtkglextmm

編譯時可能會報錯,在joystick.cpp中加下頭文件

#include <stdint.h>

#include <unistd.h>

編譯方式,執行: scons

運行方式: jstest-gtk /dev/input/event11

關于方向盤與按鈕等數據對應的接口是:

joystick_test_widget.cpp中的:

void
JoystickTestWidget::axis_move(int number, int value)
{
axes.at(number)->set_fraction((value + 32767) / (double)(2*32767));

std::ostringstream str;
str << value;
axes.at(number)->set_text(str.str());
axis_callbacks[number](value / 32767.0);
std::cout << “amlinsan axis_move-number:” << number << “; value:” << value << std::endl;
}

void
JoystickTestWidget::button_move(int number, bool value)
{
if (value)
buttons.at(number)->set_down(true);
else
buttons.at(number)->set_down(false);
std::cout << “amlinsan button_move-number:” << number << “; value:” << value << std::endl;
}

接下來就在這里改就好了。

二、利用ros的joy包進行開發

  • 運行環境
    操作系統: Ubuntu 18.04
    ROS版本: ROS Melodic
  • 安裝手柄驅動和包
    依次輸入以下命令安裝
  • sudo apt-get install ros-melodic-joy(ROS相關項,Jetson TK1只安裝這一個) sudo apt-get install ros-melodic-joystick-drivers rosdep install joy rosmake joy
  • 使用步驟
    3.1 將游戲手柄接口的用戶群組更改為dialout群組
    電腦插上游戲手柄后默認情況下游戲手柄接口名稱為js0,其默認的所有者和群組都是root,即需要root權限才能進行操作。可以輸入以下命令進行查看:
  • ls -l /dev/input/js0

    輸入以下命令更改js0的root群組為dialout群組:

    sudo chgrp dialout /dev/input/js0

    再次輸入:ls -l /dev/input/js0 查看,若輸出以下信息,則表示更改成功:

    crw-rw-r--+ 1 root dialout 13, 0 105 09:03 /dev/input/js0

    3.2 測試手柄是否設置成功
    確保在電腦上插上手柄接收器后,輸入以下命令進行測試:

    sudo jstest /dev/input/js0

    按下手柄按鍵,終端上會顯示按鍵信息,若沒有出現則執行以下命令:

    sudo apt-get install joystick

    信息顯示如下:

    Driver version is 2.1.0.
    Joystick (Xbox 360 Wireless Receiver) has 4 axes (X, Y, Rx, Ry)
    and 17 buttons (BtnX, BtnY, BtnTL, BtnTR, BtnTR2, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR, ?, ?, ?, (null), (null), (null), (null)).
    Testing … (interrupt to exit)
    Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:o
    3.3 運行手柄節點
    分別在兩個終端下依次輸入以下命令來開啟ROS和joy_node節點:

    roscore rosrun joy joy_node

    下面命令可以查看話題內容:

    rostopic echo joy

    按下按鍵可收到如下信息則表示成功,做項目時只需訂閱這個話題:

    header: seq: 1stamp: secs: 1525826012nsecs: 692879198frame_id: '' axes: [0.0, -0.0, 0.0, 0.0] buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] --- header: seq: 2stamp: secs: 1525826012nsecs: 696846275frame_id: '' axes: [0.0, -0.0, 0.0, 0.0] buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] --- header: seq: 3stamp: secs: 1525826012nsecs: 700968664frame_id: '' axes: [0.0, -0.0, 0.0, 0.0] buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    原文鏈接:https://blog.csdn.net/hengheng_51/article/details/80246918

    三、調試階段——找到方向盤對應的動作接口
    ros的joy數據格式為

    --- header: seq: 1275stamp: secs: 1631168393nsecs: 841879898frame_id: "/dev/input/js0" axes: [-0.46589395403862, -1.0, 0.0, 0.0, 0.0, 0.0] buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ---

    方向盤對應 axes[0] 從左至右為[-32767,32767]ros中為從左只有為[-1,1]
    離合對應 axes[1] 從上至下為[32767,-32767]ros中為從上至下為[-1,1]
    剎車對應 axes[3] 從上至下為[32767,-32767]
    油門對應 axes[2] 從上至下為[32767,-32767]
    左撥片 buttons[5]
    右撥片 buttons[4]
    紅色圓環包圍的回車鍵 buttons[23]
    加號鍵 buttons[19]
    減號鍵 buttons[20]
    方向鍵上 axes[5] -32767 方向鍵下axes[5] 32767
    方向鍵左 axes[4] -32767 方向鍵右axes[4] 32767

    L2鍵 buttons[7]
    L3鍵 buttons[11]
    R2鍵 buttons[6]
    R3鍵 buttons[10]

    總結

    以上是生活随笔為你收集整理的罗技G29方向盘linux下的开发的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。