在windows环境下carla与罗技G29方向盘力反馈联调方法
目前网上carla和G29的联调都是在ubuntu环境下使用jstest-gtk、ROS进行方向盘控制,详情可以参考博文
https://blog.csdn.net/_/article/details/
但在windows环境下联调方法没有搜索到,自己走了不少弯路,分享一下。
原先的想法是在windows环境下安装ros2,自己通过罗技的sdk来替换jstest-gtk,重写ros2节点来实现。罗技g29sdk可参考
https://blog.csdn.net/_/article/details/
但由于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力反馈

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/53849.html