使用键盘控制gazebo小车模型运动

使用,键盘,控制,gazebo,小车,模型,运动 · 浏览次数 : 171

小编点评

**博客地址:** * gazebo小车模型(附带仿真环境) - zylyehuo - 博客园参考链接 **gazebo小车模型创建教程:** 1. **创建工作空间和文件:** * 创建一个名为 `mycar_ws` 的工作空间。 * 创建文件夹并创建以下文件: * `src/mycar/urdf/gazebo/move.xacro` * `src/mycar/urdf/xacro/car.urdf.xacro` * `src/mycar/urdf/gazebo/move.xacro` 2. **代码部分:** * `src/mycar/urdf/gazebo/move.xacro` 中包含 Transmission 和 Actuator 部分的 Xacro 文件。 * `src/mycar/urdf/xacro/car.urdf.xacro` 中包含 Robot 和 Camera 组件的 Xacro 文件。 3. **运行 gazebo:** * 在终端中运行 `gazebo` 命令。 * 在 vscode 中编译和启动 `launch` 文件: ```bash source ./devel/setup.bash roslaunch mycar environment.launch ``` 4. **启动 ROS 终端并运行程序:** * 在新的终端中运行 `rosrun` 命令: ```bash rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:=0.3 _turn:=0.5 ``` **问题解决方案:** * 确保 `teleop_twist_keyboard` 文件在与 gazebo 相同的工作空间中。 * 检查 `src/mycar/urdf/xacro/car.urdf.xacro` 中 `joint_name` 等变量的值是否与 `move.xacro` 中定义一致。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

gazebo小车模型创建详见另一篇博客

博客地址:gazebo小车模型(附带仿真环境) - zylyehuo - 博客园
参考链接

Autolabor-ROS机器人入门课程《ROS理论与实践》

ROS源码安装teleop_twist_keyboard

成果图

step1: 打开vscode进入之前创建的 mycar_ws 工作空间

step2:按如图结构创建文件夹及文件

step3: 代码部分

src/mycar/urdf/gazebo/move.xacro

<robot name="my_car_move" xmlns:xacro="http://wiki.ros.org/xacro">

    <!-- Transmission implementation: used to connect the controller and joints -->
    <xacro:macro name="joint_trans" params="joint_name">
        <!-- Transmission is important to link the joints and the controller -->
        <transmission name="${joint_name}_trans">
            <type>transmission_interface/SimpleTransmission</type>
            <joint name="${joint_name}">
                <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
            </joint>
            <actuator name="${joint_name}_motor">
                <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                <mechanicalReduction>1</mechanicalReduction>
            </actuator>
        </transmission>
    </xacro:macro>

    <!-- Each drive wheel needs to be equipped with a transmission device -->
    <xacro:joint_trans joint_name="left_wheel2base_link" />
    <xacro:joint_trans joint_name="right_wheel2base_link" />

    <!-- controller -->
    <gazebo>
        <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
            <rosDebugLevel>Debug</rosDebugLevel>
            <publishWheelTF>true</publishWheelTF>
            <robotNamespace>/</robotNamespace>
            <publishTf>1</publishTf>
            <publishWheelJointState>true</publishWheelJointState>
            <alwaysOn>true</alwaysOn>
            <updateRate>100.0</updateRate>
            <legacyMode>true</legacyMode>
            <leftJoint>left_wheel2base_link</leftJoint> <!-- left wheel -->
            <rightJoint>right_wheel2base_link</rightJoint> <!-- right wheel -->
            <wheelSeparation>${base_radius * 2}</wheelSeparation> <!-- Wheel spacing -->
            <wheelDiameter>${wheel_radius * 2}</wheelDiameter> <!-- Wheel diameter -->
            <broadcastTF>1</broadcastTF>
            <wheelTorque>30</wheelTorque>
            <wheelAcceleration>1.8</wheelAcceleration>
            <commandTopic>cmd_vel</commandTopic> <!-- Motion Control Topics -->
            <odometryFrame>odom</odometryFrame> 
            <odometryTopic>odom</odometryTopic> <!-- Odometer topic -->
            <robotBaseFrame>base_footprint</robotBaseFrame> <!-- Root coordinate system -->
        </plugin>
    </gazebo>

</robot>

src/mycar/urdf/xacro/car.urdf.xacro

<robot name="car" xmlns:xacro="http://wiki.ros.org/xacro">

    <xacro:include filename="inertial_matrix.xacro" />
    
    <xacro:include filename="car_base.urdf.xacro" />
    <xacro:include filename="car_camera.urdf.xacro" />
    <xacro:include filename="car_laser.urdf.xacro" />

    <!-- 以下为新添加的部分  -->  
    <!-- move control  -->
     <xacro:include filename="../gazebo/move.xacro" />


</robot>

step4: 运行 gazebo

(1)在终端执行 roscore 指令

roscore

(2)在 vscode 中 编译启动 launch文件

source ./devel/setup.bash

roslaunch mycar environment.launch

(3)gazebo 打开后,再打开一个新终端

rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:=0.3 _turn:=0.5

问题汇总

1、[rospack] Error: package 'teleop_twist_keyboard' not found

解决方法

参考地址:ROS源码安装teleop_twist_keyboard

2、运行 gazebo 报错

解决方法

(1)检查 src/mycar/urdf/xacro/car.urdf.xacro 中路径是否正确

(2)检查 src/mycar/urdf/gazebo/move.xacro 中 joint_name 等结点名称是否与之前定义的一致

与使用键盘控制gazebo小车模型运动相似的内容:

使用键盘控制gazebo小车模型运动

博客地址:https://www.cnblogs.com/zylyehuo/ gazebo小车模型创建详见另一篇博客 博客地址:gazebo小车模型(附带仿真环境) - zylyehuo - 博客园 参考链接 Autolabor-ROS机器人入门课程《ROS理论与实践》 ROS源码安装teleop_

gazebo+rviz 仿真

博客地址:https://www.cnblogs.com/zylyehuo/ gazebo小车模型创建及键盘操控详见之前的博客 gazebo小车模型(附带仿真环境) - zylyehuo - 博客园 使用键盘控制gazebo小车模型运动 - zylyehuo - 博客园 参考链接 Autolabor

12.2 实现键盘模拟按键

本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。键盘鼠标的模拟是实现自动化的必备流程,通常我们可以使用`keybd_event(...

12.3 实现模拟鼠标录制回放

本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。有时我们经常需要进行重复性的鼠标操作,例如繁琐的点击、拖拽。这些任务可能消耗大量...

12.1 使用键盘鼠标监控钩子

本节将介绍如何使用`Windows API`中的`SetWindowsHookEx`和`RegisterHotKey`函数来实现键盘鼠标的监控。这些函数可以用来设置全局钩子,通过对特定热键挂钩实现监控的效果,两者的区别在于`SetWindowsHookEx`函数可以对所有线程进行监控,包括其他进程中...

第一百零九篇:基本数据类型(String类型)

好家伙, 本篇内容为《JS高级程序设计》第三章学习笔记 1.String类型 字符串类型是最常用的几个基本类型之一 字符串可以使用双引号,单引号以及反引号(键盘左Tab上面那个)标示 let panghu ='panghu'; let kunkun ="kunkun"; let awei =`awe

如何使用 JS 判断用户是否处于活跃状态

有时候,我们需要在网页判断用户是否处与非活跃状态,如果用户长时间没有在页面上进行任何操作,我们则判定该用户是非活跃的。 在 javascript 中我们可以通过监听某些鼠标或键盘相关的事件来判定用户是否在活跃中。

APP中RN页面热更新流程-ReactNative源码分析

平时使用WebStorm或VSCode对RN工程中的文件修改后,在键盘上按一下快捷cmd+s进行文件保存,此时当前调试的RN页面就会自动进行刷新,这是RN开发相比于原生开发一个很大的优点:热更新。 那么,从按一下快捷cmd+s到RN页面展示出最新的JS页面,这个过程是怎样发生的呢?下面根据时间顺序来

VS Code常用快捷键

前言 对于开发者而言,熟悉快捷键的使用,能够起到事半功倍的作用,提高工作效率。以下是我整理的一份VS Code常用快捷键清单,希望能够帮助到你,欢迎在评论区留下你的常用快捷键🤞。 设置VS Code中的键盘快捷方式 Ctrl + K + S 常用快捷键 快捷键描述 Ctrl + Shift + P

修改页面内文字颜色

博客地址:https://www.cnblogs.com/zylyehuo/ 该方法仅用于截图 未改变网站数据 在所在页面打开“检查”(或者按键盘上F12 部分笔记本电脑需要结合Fn键使用) 在跳出的窗口中找到该按键,按下后选择要选择的区域 找到距离td标签最近的tr标签 双击该tr行 将光标移到最