{"action":"created","comment":{"url":"https://api.github.com/repos/RussTedrake/underactuated/pulls/comments/39144810","id":39144810,"diff_hunk":"@@ -739,37 +748,43 @@\n \n <section data-type=\"sect2\"><h1>Nonholonomic constraints</h1>\n \n-<p> You might have heard of the term \"nonholonomic system\" (e.g.\n+<p> You might have heard of the term \"nonholonomic system\" (see e.g.\n <elib>Bloch03</elib>), and be thinking about how nonholonomy relates to\n-underactuation.  Briefly, a nonholonomic constraint is a constraint on the\n-derivatives of the system which cannot be integrated into a constraint on the\n-positions of the system.  An automobile or traditional wheeled robot provides a\n+underactuation.  Briefly, a nonholonomic constraint is a constraint\n+of the form $\\phi({\\bf q}, {\\bf \\dot{q}}, t) = 0$, which cannot be\n+integrated into a constraint of the form $\\phi({\\bf q}, t) = 0$ (a holonomic constraint).\n+A nonholonomic constraint does not restrain the possible configurations of\n+the system, but rather the manner in which those configurations can be reached.\n+While a holonomic constraint reduces the number of degrees of freedom of a system by one,\n+a nonholonomic constraint does not. An automobile or traditional wheeled robot provides a\n canonical example:\n \n <div data-type=\"example\"><h1>Wheeled robot</h1> Consider a simple model of a\n-wheeled robot who's configuration is described by its Cartesian position $x,y$\n+wheeled robot whose configuration is described by its Cartesian position $x,y$\n and its orientation, $\\theta$, so ${\\bf q} = \\begin{bmatrix} x, y, \\theta\n-\\end{bmatrix}^T$.  The system is subject to differential constraints that\n-prevent side-slip, e.g., \\begin{gather*} \\dot{x} = v \\cos\\theta \\\\ \\dot{y} = v\n-\\sin\\theta \\\\ v = \\sqrt{\\dot{x}^2 + \\dot{y}^2} \\end{gather*} These constraints\n-cannot be integrated into constraint on position--the car can get to any\n-configuration $(x,y,\\theta)$, it just can't move directly sideways--so they are\n-nonholonomic constraints. </div>\n+\\end{bmatrix}^T$.  The system is subject to a differential constraint that\n+prevents side-slip, \\begin{gather*} \\dot{x} = v \\cos\\theta \\\\ \\dot{y} = v\n+\\sin\\theta \\\\ v = \\sqrt{\\dot{x}^2 + \\dot{y}^2} \\end{gather*} or equivalently,\n+\\[\\dot{y} \\cos \\theta - \\dot x \\sin \\theta = 0.\\] This constraint\n+cannot be integrated into a constraint on configuration&mdash;the car can get to any\n+configuration $(x,y,\\theta)$, it just can't move directly sideways&mdash;so this is a\n+nonholonomic constraint. </div>\n \n Contrast the wheeled robot example with a robot on train tracks.  The train tracks\n-would represent a holonomic constraint: if the system was written down in the\n-$(x,y,\\theta)$ coordinates then the differential track constraints could be\n-integrated resulting in a description of the system in a reduced coordinate\n-system--train tracks are holonomic constraints. </p>\n+correspond to a holonomic constraint: the track constraint can be written directly in\n+terms of the configuration ${\\bf q}$ of the system, without using the velocity ${\\bf \\dot{q}}$.\n+Even though the track constraint could also be written as a differential constraint\n+on the velocity, it would be possible to integrate this constraint to obtain\n+a constraint on configuration. The track restrains the possible configurations of the system.\n \n-<p> A nonholomic constraint like the no-side-slip constraint on the wheeled\n+<p> A nonholonomic constraint like the no-side-slip constraint on the wheeled\n vehicle certainly results in an underactuated system.  The converse is not\n-necessarily true--the double pendulum system which is missing an actuator is\n-underactauted but would not typically be called a nonholonmic system.  However,\n+necessarily true&mdash;the double pendulum system which is missing an actuator is\n+underactuated but would not typically be called a nonholonomic system.  However,\n while the definition of a nonholonomic constraint is clear, in my view the\n definition used in the literature for a \"nonholonomic system\" is more\n ambiguous&dagger;<sidenote>&dagger; Why, for instance, are the Lagrangian\n-equations of motion for the double pendulum--clearly non-integrable-- not\n+equations of motion for the double pendulum&mdash;clearly non-integrable&mdash;not\n considered nonholonomic constraints?</sidenote>, and we'll generally avoid using\n the term. </p>","path":"underactuated.html","position":224,"original_position":224,"commit_id":"cd8536b241d846e0ae8fdc8773680ca3ce1dec04","original_commit_id":"cd8536b241d846e0ae8fdc8773680ca3ce1dec04","user":{"login":"RussTedrake","id":6442292,"avatar_url":"https://avatars.githubusercontent.com/u/6442292?v=3","gravatar_id":"","url":"https://api.github.com/users/RussTedrake","html_url":"https://github.com/RussTedrake","followers_url":"https://api.github.com/users/RussTedrake/followers","following_url":"https://api.github.com/users/RussTedrake/following{/other_user}","gists_url":"https://api.github.com/users/RussTedrake/gists{/gist_id}","starred_url":"https://api.github.com/users/RussTedrake/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RussTedrake/subscriptions","organizations_url":"https://api.github.com/users/RussTedrake/orgs","repos_url":"https://api.github.com/users/RussTedrake/repos","events_url":"https://api.github.com/users/RussTedrake/events{/privacy}","received_events_url":"https://api.github.com/users/RussTedrake/received_events","type":"User","site_admin":false},"body":"nice.  i guess i agree.","created_at":"2015-09-10T10:22:51Z","updated_at":"2015-09-10T10:22:51Z","html_url":"https://github.com/RussTedrake/underactuated/pull/13#discussion_r39144810","pull_request_url":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13","_links":{"self":{"href":"https://api.github.com/repos/RussTedrake/underactuated/pulls/comments/39144810"},"html":{"href":"https://github.com/RussTedrake/underactuated/pull/13#discussion_r39144810"},"pull_request":{"href":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13"}}},"pull_request":{"url":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13","id":44381344,"html_url":"https://github.com/RussTedrake/underactuated/pull/13","diff_url":"https://github.com/RussTedrake/underactuated/pull/13.diff","patch_url":"https://github.com/RussTedrake/underactuated/pull/13.patch","issue_url":"https://api.github.com/repos/RussTedrake/underactuated/issues/13","number":13,"state":"open","locked":false,"title":"Proposed minor improvements to chapter 1","user":{"login":"tkoolen","id":2585880,"avatar_url":"https://avatars.githubusercontent.com/u/2585880?v=3","gravatar_id":"","url":"https://api.github.com/users/tkoolen","html_url":"https://github.com/tkoolen","followers_url":"https://api.github.com/users/tkoolen/followers","following_url":"https://api.github.com/users/tkoolen/following{/other_user}","gists_url":"https://api.github.com/users/tkoolen/gists{/gist_id}","starred_url":"https://api.github.com/users/tkoolen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkoolen/subscriptions","organizations_url":"https://api.github.com/users/tkoolen/orgs","repos_url":"https://api.github.com/users/tkoolen/repos","events_url":"https://api.github.com/users/tkoolen/events{/privacy}","received_events_url":"https://api.github.com/users/tkoolen/received_events","type":"User","site_admin":false},"body":"* be a little more consistent/careful in the usage of dynamical system vs. control system\r\n* improve nonholonomic constraints section a bit\r\n* spelling\r\n* minor other tweaks\r\n","created_at":"2015-09-07T22:25:20Z","updated_at":"2015-09-10T10:22:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"14c10ec36825283fd35c034e085a3c977b0de237","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13/commits","review_comments_url":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13/comments","review_comment_url":"https://api.github.com/repos/RussTedrake/underactuated/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RussTedrake/underactuated/issues/13/comments","statuses_url":"https://api.github.com/repos/RussTedrake/underactuated/statuses/cd8536b241d846e0ae8fdc8773680ca3ce1dec04","head":{"label":"tkoolen:tk-fixes-chapter-1","ref":"tk-fixes-chapter-1","sha":"cd8536b241d846e0ae8fdc8773680ca3ce1dec04","user":{"login":"tkoolen","id":2585880,"avatar_url":"https://avatars.githubusercontent.com/u/2585880?v=3","gravatar_id":"","url":"https://api.github.com/users/tkoolen","html_url":"https://github.com/tkoolen","followers_url":"https://api.github.com/users/tkoolen/followers","following_url":"https://api.github.com/users/tkoolen/following{/other_user}","gists_url":"https://api.github.com/users/tkoolen/gists{/gist_id}","starred_url":"https://api.github.com/users/tkoolen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkoolen/subscriptions","organizations_url":"https://api.github.com/users/tkoolen/orgs","repos_url":"https://api.github.com/users/tkoolen/repos","events_url":"https://api.github.com/users/tkoolen/events{/privacy}","received_events_url":"https://api.github.com/users/tkoolen/received_events","type":"User","site_admin":false},"repo":{"id":42065263,"name":"underactuated","full_name":"tkoolen/underactuated","owner":{"login":"tkoolen","id":2585880,"avatar_url":"https://avatars.githubusercontent.com/u/2585880?v=3","gravatar_id":"","url":"https://api.github.com/users/tkoolen","html_url":"https://github.com/tkoolen","followers_url":"https://api.github.com/users/tkoolen/followers","following_url":"https://api.github.com/users/tkoolen/following{/other_user}","gists_url":"https://api.github.com/users/tkoolen/gists{/gist_id}","starred_url":"https://api.github.com/users/tkoolen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tkoolen/subscriptions","organizations_url":"https://api.github.com/users/tkoolen/orgs","repos_url":"https://api.github.com/users/tkoolen/repos","events_url":"https://api.github.com/users/tkoolen/events{/privacy}","received_events_url":"https://api.github.com/users/tkoolen/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tkoolen/underactuated","description":"The course text for MIT 6.832 (and 6.832x on edX)","fork":true,"url":"https://api.github.com/repos/tkoolen/underactuated","forks_url":"https://api.github.com/repos/tkoolen/underactuated/forks","keys_url":"https://api.github.com/repos/tkoolen/underactuated/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tkoolen/underactuated/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tkoolen/underactuated/teams","hooks_url":"https://api.github.com/repos/tkoolen/underactuated/hooks","issue_events_url":"https://api.github.com/repos/tkoolen/underactuated/issues/events{/number}","events_url":"https://api.github.com/repos/tkoolen/underactuated/events","assignees_url":"https://api.github.com/repos/tkoolen/underactuated/assignees{/user}","branches_url":"https://api.github.com/repos/tkoolen/underactuated/branches{/branch}","tags_url":"https://api.github.com/repos/tkoolen/underactuated/tags","blobs_url":"https://api.github.com/repos/tkoolen/underactuated/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tkoolen/underactuated/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tkoolen/underactuated/git/refs{/sha}","trees_url":"https://api.github.com/repos/tkoolen/underactuated/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tkoolen/underactuated/statuses/{sha}","languages_url":"https://api.github.com/repos/tkoolen/underactuated/languages","stargazers_url":"https://api.github.com/repos/tkoolen/underactuated/stargazers","contributors_url":"https://api.github.com/repos/tkoolen/underactuated/contributors","subscribers_url":"https://api.github.com/repos/tkoolen/underactuated/subscribers","subscription_url":"https://api.github.com/repos/tkoolen/underactuated/subscription","commits_url":"https://api.github.com/repos/tkoolen/underactuated/commits{/sha}","git_commits_url":"https://api.github.com/repos/tkoolen/underactuated/git/commits{/sha}","comments_url":"https://api.github.com/repos/tkoolen/underactuated/comments{/number}","issue_comment_url":"https://api.github.com/repos/tkoolen/underactuated/issues/comments{/number}","contents_url":"https://api.github.com/repos/tkoolen/underactuated/contents/{+path}","compare_url":"https://api.github.com/repos/tkoolen/underactuated/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tkoolen/underactuated/merges","archive_url":"https://api.github.com/repos/tkoolen/underactuated/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tkoolen/underactuated/downloads","issues_url":"https://api.github.com/repos/tkoolen/underactuated/issues{/number}","pulls_url":"https://api.github.com/repos/tkoolen/underactuated/pulls{/number}","milestones_url":"https://api.github.com/repos/tkoolen/underactuated/milestones{/number}","notifications_url":"https://api.github.com/repos/tkoolen/underactuated/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tkoolen/underactuated/labels{/name}","releases_url":"https://api.github.com/repos/tkoolen/underactuated/releases{/id}","created_at":"2015-09-07T17:10:05Z","updated_at":"2015-09-07T17:10:06Z","pushed_at":"2015-09-07T22:20:11Z","git_url":"git://github.com/tkoolen/underactuated.git","ssh_url":"git@github.com:tkoolen/underactuated.git","clone_url":"https://github.com/tkoolen/underactuated.git","svn_url":"https://github.com/tkoolen/underactuated","homepage":null,"size":8258,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"RussTedrake:master","ref":"master","sha":"6ec03e3a2690ee84edf91e1ed82dba35c428ff4f","user":{"login":"RussTedrake","id":6442292,"avatar_url":"https://avatars.githubusercontent.com/u/6442292?v=3","gravatar_id":"","url":"https://api.github.com/users/RussTedrake","html_url":"https://github.com/RussTedrake","followers_url":"https://api.github.com/users/RussTedrake/followers","following_url":"https://api.github.com/users/RussTedrake/following{/other_user}","gists_url":"https://api.github.com/users/RussTedrake/gists{/gist_id}","starred_url":"https://api.github.com/users/RussTedrake/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RussTedrake/subscriptions","organizations_url":"https://api.github.com/users/RussTedrake/orgs","repos_url":"https://api.github.com/users/RussTedrake/repos","events_url":"https://api.github.com/users/RussTedrake/events{/privacy}","received_events_url":"https://api.github.com/users/RussTedrake/received_events","type":"User","site_admin":false},"repo":{"id":23526294,"name":"underactuated","full_name":"RussTedrake/underactuated","owner":{"login":"RussTedrake","id":6442292,"avatar_url":"https://avatars.githubusercontent.com/u/6442292?v=3","gravatar_id":"","url":"https://api.github.com/users/RussTedrake","html_url":"https://github.com/RussTedrake","followers_url":"https://api.github.com/users/RussTedrake/followers","following_url":"https://api.github.com/users/RussTedrake/following{/other_user}","gists_url":"https://api.github.com/users/RussTedrake/gists{/gist_id}","starred_url":"https://api.github.com/users/RussTedrake/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RussTedrake/subscriptions","organizations_url":"https://api.github.com/users/RussTedrake/orgs","repos_url":"https://api.github.com/users/RussTedrake/repos","events_url":"https://api.github.com/users/RussTedrake/events{/privacy}","received_events_url":"https://api.github.com/users/RussTedrake/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/RussTedrake/underactuated","description":"The course text for MIT 6.832 (and 6.832x on edX)","fork":false,"url":"https://api.github.com/repos/RussTedrake/underactuated","forks_url":"https://api.github.com/repos/RussTedrake/underactuated/forks","keys_url":"https://api.github.com/repos/RussTedrake/underactuated/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RussTedrake/underactuated/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RussTedrake/underactuated/teams","hooks_url":"https://api.github.com/repos/RussTedrake/underactuated/hooks","issue_events_url":"https://api.github.com/repos/RussTedrake/underactuated/issues/events{/number}","events_url":"https://api.github.com/repos/RussTedrake/underactuated/events","assignees_url":"https://api.github.com/repos/RussTedrake/underactuated/assignees{/user}","branches_url":"https://api.github.com/repos/RussTedrake/underactuated/branches{/branch}","tags_url":"https://api.github.com/repos/RussTedrake/underactuated/tags","blobs_url":"https://api.github.com/repos/RussTedrake/underactuated/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RussTedrake/underactuated/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RussTedrake/underactuated/git/refs{/sha}","trees_url":"https://api.github.com/repos/RussTedrake/underactuated/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RussTedrake/underactuated/statuses/{sha}","languages_url":"https://api.github.com/repos/RussTedrake/underactuated/languages","stargazers_url":"https://api.github.com/repos/RussTedrake/underactuated/stargazers","contributors_url":"https://api.github.com/repos/RussTedrake/underactuated/contributors","subscribers_url":"https://api.github.com/repos/RussTedrake/underactuated/subscribers","subscription_url":"https://api.github.com/repos/RussTedrake/underactuated/subscription","commits_url":"https://api.github.com/repos/RussTedrake/underactuated/commits{/sha}","git_commits_url":"https://api.github.com/repos/RussTedrake/underactuated/git/commits{/sha}","comments_url":"https://api.github.com/repos/RussTedrake/underactuated/comments{/number}","issue_comment_url":"https://api.github.com/repos/RussTedrake/underactuated/issues/comments{/number}","contents_url":"https://api.github.com/repos/RussTedrake/underactuated/contents/{+path}","compare_url":"https://api.github.com/repos/RussTedrake/underactuated/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RussTedrake/underactuated/merges","archive_url":"https://api.github.com/repos/RussTedrake/underactuated/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RussTedrake/underactuated/downloads","issues_url":"https://api.github.com/repos/RussTedrake/underactuated/issues{/number}","pulls_url":"https://api.github.com/repos/RussTedrake/underactuated/pulls{/number}","milestones_url":"https://api.github.com/repos/RussTedrake/underactuated/milestones{/number}","notifications_url":"https://api.github.com/repos/RussTedrake/underactuated/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RussTedrake/underactuated/labels{/name}","releases_url":"https://api.github.com/repos/RussTedrake/underactuated/releases{/id}","created_at":"2014-09-01T00:43:31Z","updated_at":"2015-07-18T19:08:38Z","pushed_at":"2015-09-07T22:25:22Z","git_url":"git://github.com/RussTedrake/underactuated.git","ssh_url":"git@github.com:RussTedrake/underactuated.git","clone_url":"https://github.com/RussTedrake/underactuated.git","svn_url":"https://github.com/RussTedrake/underactuated","homepage":null,"size":8258,"stargazers_count":4,"watchers_count":4,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":6,"forks":7,"open_issues":6,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13"},"html":{"href":"https://github.com/RussTedrake/underactuated/pull/13"},"issue":{"href":"https://api.github.com/repos/RussTedrake/underactuated/issues/13"},"comments":{"href":"https://api.github.com/repos/RussTedrake/underactuated/issues/13/comments"},"review_comments":{"href":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13/comments"},"review_comment":{"href":"https://api.github.com/repos/RussTedrake/underactuated/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RussTedrake/underactuated/pulls/13/commits"},"statuses":{"href":"https://api.github.com/repos/RussTedrake/underactuated/statuses/cd8536b241d846e0ae8fdc8773680ca3ce1dec04"}}}}