【CARLA】在windows环境下carla与罗技G29方向盘力反馈联调方法

在windows环境下carla与罗技G29方向盘力反馈联调方法

目前网上carla和G29的联调都是在ubuntu环境下使用jstest-gtk、ROS进行方向盘控制,详情可以参考博文

https://blog.youkuaiyun.com/qq_44237695/article/details/129103700

但在windows环境下联调方法没有搜索到,自己走了不少弯路,分享一下。

原先的想法是在windows环境下安装ros2,自己通过罗技的sdk来替换jstest-gtk,重写ros2节点来实现。罗技g29sdk可参考

https://blog.youkuaiyun.com/qq_41250354/article/details/104652071

但由于C++的g29 sdk强制要求界面,carla在控制方向盘时也要求指定pygame界面,所以这个方案堵死了很久。天无绝人之路,在github上找到一个大神写的G29python代码,这个代码用的C# dll修改,初始化过程不需要界面。同时由于是python写的,可以绕开ros2这个过程,减少非常多的学习量。

github页面:https://github.com/cengizozel/LogiDrivePy

具体联调过程:

环境:

python3.7

carla0.9.14

罗技G-hub驱动

G29方向盘

首先去罗技官网安装方向盘启动,安装好后驱动界面显示G29方向盘,同时方向盘转动自检。

在这里插入图片描述

python环境中安装CARLA与logidrivepy

pip install carla
pip install logidrivepy

这里要创建一个ini的配置文件。

wheel_config.ini

[G29 Racing Wheel]
steering_wheel = 0
throttle = 2
brake = 3
reverse = 5
handbrake = 4

其中数字可能需要自己试这里steering_wheel表示方向盘方向、throttle油门和brake刹车已经是正确的设置了。要保证这个设置和.py文件在同一个目录下否则会报错。

下载carla-API后,运行carla客户端

在这里插入图片描述

随后运行PythonAPI/examples/manual_control_steeringwheel.py文件

在这里插入图片描述

此时即可开启车辆。

carla-g29自动驾驶力反馈

另启一个文件,复制以下代码

import sys
import carla
sys.path.append('../logidrivepy')
from logidrivepy import LogitechController
import time


class SimpleController:
    def __init__(self, k):
        # k 是比例增益,用于调整控制器的响应速度
        self.k = k

    def control(self, aim, now):
        # 计算位置差值
        error = now - aim

        # 计算输出力
        force = self.k * error

        return force

class ForceFeedback:
    def __init__(self):
        self.position = None
        self.torque = None

class Node():
    def __init__(self, client):
        self.client = client
        self.world = client.get_world()
        self.actor = self.get_hero()

    def get_hero(self):
        for actor in self.world.get_actors():
            if actor.attributes.get("role_name") in ["hero", "ego_vehicle"]:
                return actor

    def timer_cb(self):
        out_msg = ForceFeedback()

        steering_angle = self.actor.get_control().steer
        out_msg.position = steering_angle
        out_msg.torque = 0.8

    def get_position(self):
        steering_angle = self.actor.get_control().steer
        position = steering_angle
        return position


def main(args=None):
    controller = LogitechController()
    controller.steering_initialize()

    print("\n---Logitech Spin Test---")

    client = carla.Client("127.0.0.1", 2000)
    client.set_timeout(2.0)

    carla_car = Node(client)
    # 创建一个PID控制器
    sc = SimpleController(k=1)

    # 在每个时间步中,更新控制器并使用新的力
    while True:
        aim = carla_car.get_position() * 150
        now = (controller.LogiGetStateENGINES(0).contents.lX) / 327.50
        if (abs(aim)<1):
            controller.LogiPlaySoftstopForce(0,0)
            controller.logi_update()
            time.sleep(0.1)
            controller.LogiStopSoftstopForce(0)
            controller.logi_update()
            print("Target: {}, Current State: {}".format(aim, now))
        else:
            force = sc.control(now, aim)
            controller.LogiPlayConstantForce(0, -int(force)*2)
            controller.logi_update()
            print("Force: {}, Target: {}, Current State: {}".format(force, aim, now))
            time.sleep(0.1)
    controller.steering_shutdown()

if __name__ == "__main__":
    main()

在pygame界面键盘P开启自动驾驶,此时方向盘会随着车辆自行转动。

这个代码是测试用的效果不太好,有更好效果需求得换更好的控制代码了。

CARLA-G29力反馈

### 配置Carla模拟器以兼容罗技G29方向盘 #### 安装必要的依赖项 为了使Carla模拟器能够罗技G29方向盘正常工作,在Windows环境下需确保安装了所有必需的驱动程序和支持库。建议先在Windows操作系统中安装最新的罗技游戏外设官方驱动,这一步骤可以保证硬件被正确识别并初始化。 #### 下载和编译ROS-G29力反馈控制包 由于存在专门针对Logitech G29方向盘ROS2软件包[^2],可以通过下载此包来简化集成过程。尽管该包主要面向Linux平台开发,但其核心功能——即通过ROS消息实现对方向盘力反馈特性的精确调控——同样适用于Windows环境下的应用拓展。对于希望利用这一特性增强用户体验的研究人员来说,这是一个非常有价值的工具。 #### Carla模拟器设置 按照特定指南完成Python接口罗技G29之间的初步对接后,下一步就是调整Carla模拟器的相关参数以便更好地适配实际设备输入。具体操作如下: 1. 启动Carla模拟器客户端; 2. 进入`Settings`选项卡内修改控制器映射方案,确保Axes轴编号(0, 1, 2...)对应于物理按钮布局中的正确位置[^3]; 3. 调整视图模式至适合手柄操控的第一人称视角或其他偏好角度; 4. 测试基本转向、加速减速等功能是否响应灵敏流畅; ```python import carla client = carla.Client('localhost', 2000) world = client.get_world() settings = world.get_settings() settings.synchronous_mode = True # 设置同步模式 settings.fixed_delta_seconds = 0.05 # 控制帧率稳定 world.apply_settings(settings) spectator = world.get_spectator() vehicle_bp = world.get_blueprint_library().find('vehicle.tesla.model3') spawn_point = random.choice(world.get_map().get_spawn_points()) ego_vehicle = world.spawn_actor(vehicle_bp, spawn_point) control = ego_vehicle.get_control() print(control.steer) # 输出当前车辆转向角 ``` 上述脚本展示了如何获取并打印出由玩家操纵产生的即时转向数据流。当结合真实感十足的手感回馈机制之后,整个交互体验将会更加逼真生动。 #### 动态场景创建 考虑到用户可能想要在一个高度复杂的交通环境中测试算法性能的需求,可借助Carla内置的地图编辑器自定义道路网络结构及障碍物摆放情况。此外还可以编程设定其他NPC车辆的行为逻辑,比如随机行驶路径规划或是固定巡逻路线等,以此增加训练样本多样性的同时也提高了实验结果的有效性和可靠性[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值