没图说p,看图 https://github.com/NVIDIA-AI-IOT/jetracer#setup 独立自主的AI赛车 RC车模 专业的RC车模
以上内容是打开nano连接WiFi。在浏览器内连接 其实我的方案比这个好,直接就是用串口连接看IP,然后SSH连接 http://<jetson_ip_address>:8888 用这个IP来连接小车,就可以打开电脑编程了 接下来的内容是,下载安装好几个要运行的库~ cd $HOME git clone https://github.com/NVIDIA-AI-IOT/jetcam cd jetcam sudo python3 setup.py install cd $HOME git clone https://github.com/NVIDIA-AI-IOT/torch2trt cd torch2trt sudo python3 setup.py install cd $HOME git clone https://github.com/NVIDIA-AI-IOT/jetracer cd jetracer sudo python3 setup.py install 因为执行的脚本都差不多,我给你讲一下是什么意思。先把目录转移到家目录,然后clone对应的库。接着转移到下载的库内,执行python的安装脚本 sudo nvpmodel -m1 接着把Nano的功率锁定在5W的水平上面,毕竟是个充电宝驱动东西,活力全开受不了~ 这个就是我们的安装文件 install_requires=[ 'marshmallow>=3.0.0b11' ] 在这个setup文件安装对应的库的时候,可以这样写对应的依赖 ind_package()命令是用来查找依赖包的,理想情况下,一句find_package()把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到,后续只管用就好了。我没有见过这个包,查找了一下~ https://www.cnpython.com/pypi/adafruit-circuitpython-servokit 是个伺服电机的库 这样的,所有的轮子都是用PWM控制的 可以级联控制板 你看一次可以控制多少舵机,(其实就是有多少路PWM) http://www.elecfans.com/d/1123469.html 在pi中的连接,在nano里面也是这个连接法 init是必须写的文件 Traitlets是什么Traitlets 允许Python自定义类拥有类型检查、动态计算默认值和Change回调这三种特性。1 如何使用Traitlets只需要继承HasTraits即可让自定义的类获得这一系列特性。 看见了一个修饰符,查查看 在源码中是用到这里的 我查了一下这个单词的意思 在学术里面找到了这个意思 那我们可以找到,这个类里面是控制车的运动情况的 一个是油门,一个就是这个steering(就好像舵机一样),这两个量可以控制小车的前进状态 def _clip_steering(self, proposal): if proposal['value'] > 1.0: return 1.0 elif proposal['value'] < -1.0: return -1.0 else: return proposal['value'] 在值大于1的时候返回1,小于-1就是返回-1 在1-(-1)之间就返回自己的值,也就是说,对输出的量进行了规约 在另一个文件,我们先看到导入的文件。一个是规约文件,一个是静态库,一个是伺服电机的控制库 首先是对要控制的赛车的一些参数的标定 我们可以这样想,对于一个车想转弯的时候,前面的导向轮是要转动一些角度。一个多少度,二是转弯的这个过程有多块(就是是不是蹭的一下就角度有了,此时对应的是急转弯,这个值就是增益系数),所以这个值就是给了转向。 steering_gain = traitlets.Float(default_value=-0.65) # 转向增益 steering_offset = traitlets.Float(default_value=0) # 转向偏移 steering_channel = traitlets.Integer(default_value=0) # 转向通道 throttle_gain = traitlets.Float(default_value=0.8) # 油门增益 throttle_channel = traitlets.Integer(default_value=1) # 油门通道 此时的值可以分为两组 这段代码是对类的初始化,首先是继承。其次是读取伺服电机的地址 def __init__(self, *args, **kwargs): super(NvidiaRacecar, self).__init__(*args, **kwargs) self.kit = ServoKit(channels=16, address=self.i2c_address) # 连续伺服 self.steering_motor = self.kit.continuous_servo[self.steering_channel] # 油门马达 self.throttle_motor = self.kit.continuous_servo[self.throttle_channel] 以及油门和转向的伺服电机通道设置 下面的代码要用到这个修饰符 @traitlets.observe('steering') def _on_steering(self, change): self.steering_motor.throttle = change['new'] * \ self.steering_gain + self.steering_offset #转向马达 = 一个输入的值X转向增益+转向偏移
@traitlets.observe('throttle') def _on_throttle(self, change): self.throttle_motor.throttle = change['new'] * self.throttle_gain # 油门马达 = 一个输入的新值X油门增益
想 from jetracer.nvidia_racecar import NvidiaRacecar
car = NvidiaRacecar() 一开的代码一定是创建一个类,名字叫car~
|
|