精华内容
下载资源
问答
  • C++教程 学习笔记

    千次阅读 多人点赞 2020-01-29 14:55:20
    C++教程 学习笔记 大家好!我要学习C++语言,目前主要是看 菜鸟教程。其中这篇文章选取了 C++教程 的部分重点内容,后面会继续更新 C++面向对象、C++高级教程、C++资源库 的学习笔记。 1、概念 1.1 g++应用说明 ...

    C++教程 学习笔记

    大家好!我要学习C++语言,目前主要是看 菜鸟教程。其中这篇文章选取了 C++教程 的部分重点内容,后面会继续更新 C++面向对象C++高级教程C++资源库 的学习笔记。

    1、概念

    1.1 g++应用说明

    • 程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库 而不用 C 标准库。

    1.2 变量作用域

    • 局部变量:在函数或一个代码块内部声明的变量。定义时需要自行对其初始化。
    • 形式参数:在函数参数的定义中声明的变量。
    • 全局变量:在所有函数外部声明的变量。定义时系统自动初始化。

    2、语法

    2.1 typedef 声明

    • 作用:使用 typedef 为一个已有的类型取一个新的名字。
    • 举例:typedef longlong ll;

    2.2 定义常量

    • 使用 #define 预处理器。
      #define identifier value
    • 使用 const 关键字。
      const type variable = value;

    2.3 C++ 存储类

    类型说明
    auto声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。
    register只用于需要快速访问的变量,比如计数器。用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。
    static函数调用之间保持局部变量的值。static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
    extern用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。
    mutable仅适用于类的对象
    thread_local (C++11)声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。
    • 从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用

    2.4 杂项运算符

    运算符描述
    sizeofsizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。
    Condition ? X : Y条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。
    ,逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值
    .(点)和 ->(箭头)成员运算符用于引用类、结构和共用体的成员
    Cast强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。
    &指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。
    *指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。

    2.5 函数

    1. 定义函数
    return_type function_name( parameter list ) 
    {
    	body of the function; 
    }
    
    1. 函数声明
    return_type function_name( parameter list );
    
    如:int max(int num1, int num2);int max(int, int);
    
    1. 函数参数
    • 当调用函数时,有三种向函数传递参数的方式:
    调用类型描述
    传值调用该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
    指针调用该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
    引用调用该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
    • 默认情况下,C++ 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的参数。

    2.6 引用

    • 引用通常用于函数参数列表和函数返回值。
    概念描述
    把引用作为参数C++ 支持把引用作为参数传给函数,这比传一般的参数更安全。
    把引用作为返回值可以从 C++ 函数中返回引用,就像返回其他数据类型一样。

    2.7 结构体

    1. 定义
    struct type_name { 
    member_type1 member_name1; 
    member_type2 member_name2; 
    member_type3 member_name3; 
    . . 
    } object_names;
    
    1. 使用成员访问运算符 . 访问结构成员
    2. 结构作为函数参数
    3. 指向结构体的指针

    3、其它,未完待续

    1. 无限循环的表示:for(;;)
    展开全文
  • Python基础教程学习第一日:起步

    千次阅读 多人点赞 2017-03-23 16:46:30
    Python基础教程学习

    在python3.0以后的版本中,raw_input和input合体了,取消raw_input,并用input代替,现在的版本input接收的是字符串,如果接受的是数字可以用x = int(input(“x: “))。

    python中的math模块,实现了许多对浮点数的数学运算函数,如三角函数、exp(x)求幂函数、fabs(x)求绝对值函数、floor(x)向下取整、ceil(x)向上取整、sqrt(x)求平方根、fmod(x,y)求x/y的余数(与x%y相同)、pow(x,y)求x的y次方(与x**y相同)等等。
    cmath模块,实际上是用于复数(complex math)的运算, cmath模块的函数跟math模块函数基本一致,区别是cmath模块运算的是复数,math模块运算的是数学运算。

    反斜杠( \ )对字符串中的引号进行转义。

    str()和repr(),书中说,这两个函数都是将值转换成合理形式的字符串,其中通过str函数,它会把值转换为合理形式的字符串,以便用户理解;通过repr函数,它会创建一个字符串,以合法的Python表达式的形式来表示值。
    简单来说,str()一般是将数值转成字符串。 repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。

    >>> print(repr("Hello, world!")
    'Hello, world!'
    >>> print(str("Hello, world!")
    Hello, world!

    原始字符串,在引号前加r表示原始字符串,原始字符串不会吧反斜杠当做特殊字符,原始字符串中输入的每个字符都会与书写的方式保持一致,当然,我们也要像平常一样对引号进行转义,但是最后输出的字符串包含了转义用的反斜杠。在原始字符串的结尾不能使用反斜杠,如果要是用的话,需要对其进行转义,而用于转义的反斜杠也会成为字符串的一部分(即两个反斜杠),如果只希望输出一个反斜杠,可以把最后一个反斜杠从原始字符串中脱离出来,作为一个单独的字符串,用反斜杠转义来处理。

    >>> print(r'C:\Program Files\foo\bar' '\\')
    C:\Program Files\foo\bar\
    展开全文
  • TxtCount.text = "count:" + Count.ToString();
  • TensorFlow官方教程学习笔记(二)——MNIST入门

    教程地址:TensorFlow官方文档中文版


    MNIST数据集是一个手写数字图像的数据集,包含了60000个训练样本和10000个测试样本,每个样本的维度是784(28*28),样本的值代表图像的灰度值,值的范围为0~1,每个样本对应一个标签,标签是一个长度为10的向量,向量中对应数字真值的位置为1,其余为0。

    教程中给了MNIST数据集下载和提取的代码:

    import tensorflow.examples.tutorials.mnist.input_data
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

    但是在运行时会报错,网上有人说替换成一下代码可以解决问题:

    from tensorflow.examples.tutorials.mnist import input_data
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

    但是下载的数据集并不是存放在\tutorials\mnist\的目录下,并且我觉得下载的速度太慢了,所以我的建议是,自行从官网上下载mnist数据集,一共包含四个后缀是gz的文件,然后在\tutorials\mnist\目录下创建一个名为MNIST_data的文件夹,将数据放到这个文件中,然后在Python中cd到\tutorials\mnist\的目录下,使用以下代码:

    import input_data
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)


    这样就将数据集提取为三个部分:mnist.train、mnist.test和mnist.validation,每个部分包含有images和labels。train、test和validation中样本的数量分别为55000、10000和5000。
    然后我们就可以使用这些数据来训练、测试和验证模型。


    教程中使用了softmax回归模型,softmax的具体内容在教程中讲的很详细,在此也不再赘述。
    在构建好回归模型后,就可以用TensorFlow来实现这个模型的训练:

    import tensorflow as tf
    x = tf.placeholder(tf.float32, [None, 784])            #构建占位符,代表输入的图像,None表示样本的数量可以是任意的
    W = tf.Variable(tf.zeros([784,10]))                    #构建一个变量,代表训练目标W,初始化为0
    b = tf.Variable(tf.zeros([10]))                        #构建一个变量,代表训练目标b,初始化为0
    y = tf.nn.softmax(tf.matmul(x,W) + b)                  #构建了一个softmax的模型:y = softmax(Wx + b),y指样本标签的预测值
    y_ = tf.placeholder("float", [None,10])                #构建占位符,代表样本标签的真实值
    cross_entropy = -tf.reduce_sum(y_*tf.log(y))           #交叉熵代价函数
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)          #使用梯度下降法(0.01的学习率)来最小化这个交叉熵代价函数
    init = tf.initialize_all_variables()                  
    sess = tf.Session()                                    #构建会话
    sess.run(init)                                         #初始化所有变量
    for i in range(1000):                                  #迭代次数为1000
      batch_xs, batch_ys = mnist.train.next_batch(100)                   #使用minibatch的训练数据,一个batch的大小为100
      sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})        #用训练数据替代占位符来执行训练
      correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))     #tf.argmax()返回的是某一维度上其数据最大所在的索引值,在这里即代表预测值和真值
      accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))    #用平均值来统计测试准确率
      print i, sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})    #打印测试信息
    sess.close()

    在我的电脑上运行的结果为:

    最终的测试准确率在91%左右。
    总的来说,TensorFlow的运行方式还是很简单明了:构建一个模型,选择一个代价函数,将训练数据传给占位符并使用优化算法最小化代价函数来不断迭代更新Variable,这就是一个基本的训练过程,在训练过程中以及训练结束后我们都可以对训练的效果来进行评估。

    展开全文
  • 教程学习一(设置助手篇)从今天开始学习MoveIt!,所用的ubuntu版本是16.04,创客智造等网址上的教程都是14.04的,但是MoveIt!官网已经更新了教程,其实除了MoveIt!和pr2相关文件的安装方式没有什么改动。 官网教程...

    从今天开始学习MoveIt!,所用的ubuntu版本是16.04,创客智造等网址上的教程都是14.04的,但是MoveIt!官网已经更新了教程,其实除了MoveIt!和pr2相关文件的安装方式没有什么改动。


    准备工作

    Kinetic上moveit!的安装

    sudo apt-get install ros-kinetic-moveit
    source /opt/ros/kinetic/setup.bash

    安装pr2相关文件

    sudo apt-get install ros-kinetic-pr2-common

    第一步 打开MoveIt!设置助手

    1. 运行roslaunch moveit_setup_assistant setup_assistant.launch
    2. 选择创建新的moveit配置包
      这里写图片描述
    3. 检索至下载好的pr2.urdf.xacro 文件(/opt/ros/kinetic/share/pr2_description/robots/pr2.urdf.xacro on Ubuntu with ROS Kinetic)
    4. 点击load files
      这里写图片描述

    第二步 配置碰撞免检查矩阵

    预先生成碰撞矩阵,降低以后的计算量。

    点击 self-collidions-generate collidion matricx
    这里写图片描述
    这里写图片描述

    第三步 添加虚拟关节

    把机器人基座base_footprint连接到世界坐标系odom_combined
    设置节点名为“virtual_joint”
    设置子link为“base_footprint”和父参考系为“odom_combined”.
    设置Joint类型为“planar”.
    点击保存
    这里写图片描述

    第四步 增加规划群组

    在语义层面描述机器人组成,如手臂,末端执行器等。
    点击planning groups——add group
    这里写图片描述

    1 添加右臂

    输入Group名为right_arm
    选择kdl_kinematics_plugin/KDLKinematicsPlugin作为运动学求解(自定义的IK功能更强大)
    保持Kin. Search Resolution和Kin. Search Timeout 为默认值.
    这里写图片描述
    点击 Add Joints按钮
    获得一个关节列表,需要从左边选择合适的关节,增加到右边的关节列表。左边按住选择从r_shoulder_pan_joint到r_wrist_roll_joint(属于右臂的所有关节)。点击>按钮,增加到右边。如图
    这里写图片描述
    点击Save按钮,保存已经选择的组。PR2每个手臂有七个关节,但是这里加了11个,这是因为因为r_upper_arm_joint, r_forearm_joint, r_forearm_cam_frame_joint, r_forearm_cam_optical_frame_joint是固定关节,保存后效果图:
    这里写图片描述

    2 添加左臂

    增加左臂类似右臂,选择从l_shoulder_pan_joint到the l_wrist_roll_joint.

    3 添加抓手

    我们将增加左端和右端的末端执行器,跟增加手臂的流程不太一样。

    点击 Add Group 按钮

    输入组名为right_gripper

    保持Kin. Search Resolution and Kin. Search Timeout 为默认值

    点击 Add Links按钮

    选择所有命名以r_gripper开头的Links,增加到Selected Links。

    点击Save

    在左臂重复相同操作。这次选择left_gripper。增加后效果如下:
    这里写图片描述

    第五步 添加机器人位姿

    添加固定的姿态到配置文件,即初始位姿。
    点击Robot Poses按钮
    点击Add Pose按钮,选择Pose名,默认值为中间值。你可以选择合适的位置,点击Save。
    注意:姿势是如何关联特定的组。你可以为每个组保存独立的姿势。
    重要提示:尝试移动所有的关节转动一圈。如果在你的URDF设置的限制有错误,你应该能够在这里看到。
    这里写图片描述

    第六步 标记末端执行器

    你已经增加PR2的左右的抓手. 现在我们指定这两个组为特定的组end-effectors,这允许内部执行一些特别的操作
    增加步骤:
    点击End Effectors, 在点击Add End-Effectors.。
    选择right_eef作为right抓手的End-Effectors的名称
    选择right_gripper 作为End Effector Group
    选择r_wrist_roll_link 作为end-effector的Parent Link
    保留Parent Group空白.效果如下
    这里写图片描述
    点击Save
    类似的添加left_eef

    第七步 添加被动关节

    例如被动脚轮,是不能直接控制的关节,我觉得可以用机械上的冗余自由度理解。

    第八步 添加作者信息

    第九步 生成配置文件

    点击Configuration Files,点击browse选择一个合适的位置,输入配置名。(例如在Home目录创建一个新目录pr2_moveit_generated,配置名想清楚再写,只包含下划线和小写字母)
    点击 Generate Package ,会生成一系列的launch和配置文件。所有的文件显示在Generated Files/Folders列表。
    这里写图片描述


    下一个学习部分:通过MoveIt! Rviz 插件 使用生成的配置文件;设置IKFast逆运动学求解器

    额外阅读:URDF和SRDF组件

    展开全文
  • java swing基础(菜鸟教程学习

    万次阅读 多人点赞 2018-12-17 22:19:21
    总之不影响我们学习 JLabel userLabel = new JLabel ( "User:" ) ; //这个方法定义组件的位置 setBounds(x,y,width,height),好,记住了,后面用的多 userLabel . setBounds ( 10 , 20 , 80 , 25...
  • 今天把张孝祥老师_银行业务调度系统视频教程学习了一下,果然不是现在的自己能做了了的,嘿嘿,大实话 心得: 一,如果程序中某一类型种类数量确定,可以选用枚举;  如本教程中的客户类型 二,可以单独建个Class文件...
  • class 为html元素定义一个或多个类名(classname)(类名从样式文件引入) id 定义元素的唯一id style 规定元素的行内样式(inline style) title 描述了元素的额外信息 (作为工具条使用)
  • Matlab 和 Simulink 教程学习基础入门

    万次阅读 多人点赞 2017-12-19 17:15:16
    MATLAB 学习工具与资源 MATLAB是什么MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的科学计算语言和编程环境。全球数以百万的工程师和科学家使用 MATLAB 来分析和设计可以改变世界的系统和产品。
  • uni-app官方教程学习笔记

    千次阅读 2019-02-12 14:04:33
    链接:https://segmentfault.com/a/1190000017020710
  • 前端方面(掌握基础即可,越精越好,建议学习顺序1) HTML+CSS基础入门 http://www.maiziedu.com/course/421/ Javascript初步 http://www.maiziedu.com/course/302/ Javascript 进阶 ...
  • 开始OpencvChina论坛的视频教程学习

    千次阅读 2014-03-08 02:07:21
    首先非常感谢 opencvChina 论坛的 无私的 作者。 现在感觉学些视觉很困难,学习资料太难找了。 读过《学习opencv》太的太晦涩,太难懂了,又加速翻译的太垃圾,读起来真有想死...视频教程,讲的虽然很急人,逻辑模糊
  • UFLDL 教程学习笔记(四)主成分分析

    千次阅读 多人点赞 2013-09-09 08:08:20
    UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套教程,内容深入浅出,有很强的实用性,学习起来,让人有种酣畅淋漓的感觉。邓侃博士于...
  • 2020年软考信息安全工程师备考学习资料包 https://www.moondream.cn/?p=1142 1.《信息安全工程师教程》重点标记版 2.《信息安全工程师考试大纲》 思维导图 3.信息安全工程师备考思维导图 4.信息安全工程师备考...
  • UFLDL 教程学习笔记(一)神经网络

    万次阅读 2013-09-03 23:20:41
    UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授编写的一套教程,内容深入浅出,有很强的实用性,学习起来,让人有种酣畅淋漓的感觉。邓侃博士于今年 2 月 ...
  • UFLDL 教程学习笔记(二)反向传导算法

    万次阅读 热门讨论 2013-09-03 23:33:02
    UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授编写的一套教程,内容深入浅出,有很强的实用性,学习起来,让人有种酣畅淋漓的感觉。邓侃博士于今年 2 月 ...
  • Blender 官方中文教程学习笔记(不断更新)

    千次阅读 多人点赞 2019-03-06 22:11:23
    导航预览 shift + 鼠标中键 = 平移 z = 切换到wireframe模式,再按一次切换到solid模式 数字键盘 5 – Orthographic mode (无num_pad可以在file的input里设置) 1 – front ...ctrl + 7 – botto...
  • struct CostFunctor { template <typename T> bool operator()(const T* const x, T* residual) const { residual[0] = T(10.0) - x[0]; return true; } };
  • UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套教程,内容深入浅出,有很强的实用性,学习起来,让人有种酣畅淋漓的感觉。邓侃博士于...
  • /** * Annotation to mark a RestTemplate bean to be configured to use a LoadBalancerClient * @author Spencer Gibb */ @Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 762,133
精华内容 304,853
关键字:

教程学习