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

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

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

https://blog.csdn.net/qq_44237695/article/details/129103700

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

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

https://blog.csdn.net/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力反馈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值