如何让罗技29方向盘像视频中的那样转动起来?

这篇具有很好参考价值的文章主要介绍了如何让罗技29方向盘像视频中的那样转动起来?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

​​​​​​​[vlog]Autoware Carla G29 自动驾驶仿真_哔哩哔哩_bilibili

话接上文,在我之前一篇博客中已经讲解了如何给罗技29方向盘装上力反馈,也就是在拨动方向盘的时候感觉有一个力组织你过度的拨动方向盘,其实它真正的用处是用于实现对方向盘发送控制指令,这不就是所谓的自动驾驶嘛!!!!(2条消息) logitech G29 Carla_”悟道“的博客-CSDN博客

最上面B站上有一个视频,展示的是Autoware发送rviz中虚拟方向盘的控制指令,Up写了一个转发的ros节点,将控制指令给转发出来,通过对罗技29的力反馈句柄上发送控制指令,实现了如此酷炫的效果,我也尝试自己写出一个转发节点,今天开源给大家,供大家参考;

#include <iostream>                                           //文件流头文件
#include "rclcpp/rclcpp.hpp"                                    
#include "sensor_msgs/msg/joy.hpp"                            
#include "ros_g29_force_feedback/msg/force_feedback.hpp"      //之前博客中的力反馈头文件

class Voyager : public rclcpp::Node                            
{
public:
  Voyager() : Node("voyager")                                //转发节点的名字叫voyager
  {
    subscription_=this->create_subscription<sensor_msgs::msg::Joy>(
      "/joy", 10, std::bind(&Voyager::callback, this, std::placeholders::_1)); //订阅者
    publisher_ = this->create_publisher<ros_g29_force_feedback::msg::ForceFeedback>(
      "/ff_target", 10);                                        //发布者
  }

private:
    void callback(const sensor_msgs::msg::Joy::SharedPtr msg)
    {
      RCLCPP_INFO(this->get_logger(), "Steering tire angle: %f", msg->axes[0]);
      auto ff_msg = ros_g29_force_feedback::msg::ForceFeedback();
      // ff_msg.header.stamp = msg->header.stamp;
      ff_msg.header.stamp = msg->header.stamp;
      ff_msg.header.frame_id=" ";
      // ff_msg.position = msg->axes[0];
      if(msg->axes[0] > 0){
        ff_msg.position = -1 * (msg->axes[0]+0.09);
      }
      else if (msg->axes[0] < 0){
        ff_msg.position = -1 * msg->axes[0] + 0.09;
      }
      else {
        ff_msg.position = 0;
      }
      // ff_msg.position = -1 * (msg->axes[0]+0.09);
      ff_msg.torque = 0.5;
      // RCLCPP_INFO(this->get_logger());
      publisher_->publish(ff_msg);
    }
  rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr subscription_;
  rclcpp::Publisher<ros_g29_force_feedback::msg::ForceFeedback>::SharedPtr publisher_;
};

int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared<Voyager>());
  rclcpp::shutdown();
  return 0;
}

这里面有一个Ubuntu的包叫joy,一般用于各鼠标键盘按压数据的接收的,我们这里可以用他来记录罗技29的转动角度(通过录rosbag的方式),到时候只需要播放bag包,罗技29方向盘就可以自己转动了;如果你想直接从autoware中获取方向盘的转动角度,也是可以的,需要修改一个subscribe(订阅者)的msg,然后根据发送过来的消息,将其中重要的数据,方向盘的转动角度,进行转发,转发给罗技方向盘就可以;

package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>voyager_pub_sub</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="m0_48707860@example.com">voyager</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <build_depend>rosidl_default_generators</build_depend>
  <exec_depend>rosidl_default_runtime</exec_depend>
  <member_of_group>rosidl_interface_packages</member_of_group>

  <depend>std_msgs</depend>
  <depend>rclcpp</depend>
  <depend>ros_g29_force_feedback</depend>
  <depend>sensor_msgs</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

CMakeLists.txt怎么写呢?

cmake_minimum_required(VERSION 3.8)
project(voyager_pub_sub)


# Default to C99
if(NOT CMAKE_C_STANDARD)
  set(CMAKE_C_STANDARD 99)
endif()

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)

find_package(ros_g29_force_feedback REQUIRED)
find_package(sensor_msgs REQUIRED)
# find_package(joy REQUIRED)

set(dependencies
  rclcpp
  std_msgs
  ros_g29_force_feedback
  sensor_msgs
)

# Generate project targer with msg
# rosidl_generate_interfaces(${PROJECT_NAME}
  # "msg/ForceFeedback.msg"
  # DEPENDENCIES rosidl_default_generators std_msgs)

# Add executable
add_executable(voyager_node src/voyager.cpp)
ament_target_dependencies(voyager_node ${dependencies})

install(TARGETS voyager_node
  DESTINATION lib/${PROJECT_NAME})

ament_export_dependencies(rosidl_default_runtime)

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  # the following line skips the linter which checks for copyrights
  # uncomment the line when a copyright and license is not present in all source files
  #set(ament_cmake_copyright_FOUND TRUE)
  # the following line skips cpplint (only works in a git repo)
  # uncomment the line when this package is not in a git repo
  #set(ament_cmake_cpplint_FOUND TRUE)
  ament_lint_auto_find_test_dependencies()
endif()

ament_package()

如何让罗技29方向盘像视频中的那样转动起来?,音视频

 其中msg文件下存放的是,之前博客中罗技29的消息体;

include中没有东西;

然后C++代码写完,剩下的就是编译了,把这个节点编译出来

source /autoware/install/setup.bash

colcon build --allow-overriding autoware_auto_vehicle_msg

1.脚本1:用于更新代码中罗技29的event口

由于每次罗技29插在电脑上,开机重启的时候这个event可能会改变,所以我用shell脚本,写了一个找到罗技29的event,并修改代码;

#!/bin/bash

event=$(cat /proc/bus/input/devices | grep "Logitech G29 Driving Force Racing Wheel" -A 5 | grep "Handlers" | grep -o "event[0-9]*")

echo "Event number: $event"

sed -i "s|/dev/input/event[0-9]*|/dev/input/$event|" Lg29/ros2_ws/src/ros-g29-force-feedback/config/g29.yaml

echo "Event changed"

2.脚本2:用于启动罗技29的节点

#!/bin/bash

gnome-terminal -e 'ls -l'

source /opt/ros/galactic/setup.bash

cd Lg29/ros2_ws/

source install/setup.bash

ros2 run ros_g29_force_feedback g29_force_feedback --ros-args --params-file src/ros-g29-force-feedback/config/g29.yaml

3.脚本3:启动转发节点

#!/bin/bash


gnome-terminal -e 'ls -l'


cd record_g29/

source install/setup.bash

ros2 run voyager_pub_sub voyager_node

4.脚本4:如果是自己通过罗技29录制的rosbag,可以选择播放rosbag,也可以选择从autoware中把节点转发出来,然后启动autoware的节点:

今日思考:其实可以对方向盘的转动做出平滑,这样方向盘的转动会更舒缓;期待大家的改进!!!文章来源地址https://www.toymoban.com/news/detail-519462.html

到了这里,关于如何让罗技29方向盘像视频中的那样转动起来?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对话小红书剑寒:如何跨方向技术融合,全局优化打造更智能的音视频系统?...

    编者按: 在 AI 时代,随着 ChatGPT 掀起技术狂潮,构建更智能的音视频系统已经成为音视频领域从业者的共同目标。 然而,音视频系统的智能化,每个从业者对其都有自己独特的视角和理解,正如“一千个人眼中有一千个哈姆雷特”一样。尽管没有统一的标准答案,我们访谈

    2024年02月13日
    浏览(38)
  • 如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样,蓝牙接近了电脑,电脑自动解锁无需输入开机密码

    Win10 专业版 远程解锁 蓝牙解锁小程序 如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样,蓝牙接近了电脑,电脑自动解锁无需输入开机密码 手机不需要拿出来,在口袋里就可以自动解锁,比如中午12点出去吃饭,人走手机也走了,蓝牙离开了电脑范围,电脑会自动解

    2024年02月07日
    浏览(65)
  • OpenCV实战(29)——视频对象追踪

    我们已经学习了如何跟踪图像序列中点和像素的运动。但在多数应用中,通常要求追踪视频中的特定移动对象。首先确定感兴趣的对象,然后必须在视频序列中对其进行追踪。由于随着它在场景中的演变,视点和光照变化、非刚性运动、遮挡等,对象在视觉上会发生诸多变化

    2024年02月13日
    浏览(25)
  • 如何截取视频中的一段视频?分享几种视频分割方法

    当处理长视频时,视频分割可以使您更加高效。如果您只需要处理其中的一部分,而不是整个视频,那么分割视频可以使您更容易找到需要处理的部分。而且,分割视频还可以使您更容易在不同的项目之间重复使用视频片段。教大家几种简单的视频分割方法,一起来学习一下

    2024年02月10日
    浏览(28)
  • 视频中的水印如何去除?教你几种简单去除视频水印方法

    视频中的水印如何去除掉呢?如果我们经常观看视频,可能会注意到一些视频上有水印。水印是在视频中嵌入的品牌标志或文字。这些水印可能会影响视频的观感,去除水印可以帮助我们在学习和研究方面更有效地使用视频资源。有时候,我们可能需要将视频插入到演示文稿

    2024年02月16日
    浏览(28)
  • OpenCV项目实战(1)— 如何去截取视频中的帧

    前言: Hello大家好,我是小哥谈。 针对一段视频,如何去截取视频中的帧呢?本节课就给大家介绍两种方式,一种方式是按一定间隔来截取视频帧,另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获! 🌈       目录 🚀1.按一定间隔截取视频帧 💥💥1.1 核心

    2024年02月09日
    浏览(28)
  • OpenCV技术应用(1)— 如何去截取视频中的帧

    前言: Hello大家好,我是小哥谈。 针对一段视频,如何去截取视频中的帧呢?本节课就给大家介绍两种方式,一种方式是按一定间隔来截取视频帧,另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获! 🌈       目录 🚀1.按一定间隔截取视频帧 💥💥1.1 核心

    2024年02月03日
    浏览(27)
  • 音视频领域的未来发展方向展望

    全景音视频技术:全景音视频技术是近年来崛起的技术,它可以为用户营造更为真实的身临其境的视听体验。未来,全景音视频技术有可能成为音视频领域的重要发展方向,可以应用于娱乐、游戏、广告、培训等各个领域。 人工智能技术:人工智能技术在音视频处理中的应用

    2024年02月13日
    浏览(32)
  • ffmpeg 如何剔除掉视频中的水印和马赛克

    FFmpeg 是一款功能强大的用于处理音视频的开源软件,可以用它来剔除视频中的水印和马赛克。具体实现方法如下: 剔除视频中的水印:FFmpeg 可以使用 maskfilter 滤镜来剔除视频中的水印。例如,以下命令可以去除视频中的水印,假设水印区域为 (x,y,w,h): 其中, -filter_complex

    2024年02月11日
    浏览(33)
  • 【LittleXi】如何将bilibili中的视频嵌入到自己网页中

    1、在b站找到自己想要的视频,鼠标移到视频上,点击右键获取视频的地址。 2、点击打开网站 3、将复制的地址粘到刚刚打开的网站中解码得到AID和CID 4、将下述网站的AID和CID替换成我们刚刚得到的值,替换完成后点开下述网站 https://api.bilibili.com/x/player/playurl?avid=AIDcid=CIDqn=

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包